Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/library_call.cpp @ 1496:e8e83be27dd7
6951190: assert(!klass_is_exact(),"only non-exact klass") while building JDK
Reviewed-by: kvn
author | never |
---|---|
date | Mon, 10 May 2010 14:58:38 -0700 |
parents | d7f654633cfe |
children | df736661d0c8 |
comparison
equal
deleted
inserted
replaced
1495:359375cb7de6 | 1496:e8e83be27dd7 |
---|---|
807 const int offset_offset = java_lang_String::offset_offset_in_bytes(); | 807 const int offset_offset = java_lang_String::offset_offset_in_bytes(); |
808 | 808 |
809 Node* no_ctrl = NULL; | 809 Node* no_ctrl = NULL; |
810 | 810 |
811 ciInstanceKlass* klass = env()->String_klass(); | 811 ciInstanceKlass* klass = env()->String_klass(); |
812 const TypeInstPtr* string_type = | 812 const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); |
813 TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0); | |
814 | 813 |
815 const TypeAryPtr* value_type = | 814 const TypeAryPtr* value_type = |
816 TypeAryPtr::make(TypePtr::NotNull, | 815 TypeAryPtr::make(TypePtr::NotNull, |
817 TypeAry::make(TypeInt::CHAR,TypeInt::POS), | 816 TypeAry::make(TypeInt::CHAR,TypeInt::POS), |
818 ciTypeArrayKlass::make(T_CHAR), true, 0); | 817 ciTypeArrayKlass::make(T_CHAR), true, 0); |
881 if (stopped()) { | 880 if (stopped()) { |
882 return true; | 881 return true; |
883 } | 882 } |
884 | 883 |
885 ciInstanceKlass* klass = env()->String_klass(); | 884 ciInstanceKlass* klass = env()->String_klass(); |
886 const TypeInstPtr* string_type = | 885 const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); |
887 TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0); | |
888 Node* no_ctrl = NULL; | 886 Node* no_ctrl = NULL; |
889 | 887 |
890 // Get counts for string and argument | 888 // Get counts for string and argument |
891 Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset); | 889 Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset); |
892 Node* receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); | 890 Node* receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); |
956 phi->init_req(3, intcon(0)); | 954 phi->init_req(3, intcon(0)); |
957 region->init_req(3, inst_false); | 955 region->init_req(3, inst_false); |
958 } | 956 } |
959 } | 957 } |
960 | 958 |
961 const TypeInstPtr* string_type = | 959 const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); |
962 TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0); | |
963 | 960 |
964 Node* no_ctrl = NULL; | 961 Node* no_ctrl = NULL; |
965 Node* receiver_cnt; | 962 Node* receiver_cnt; |
966 Node* argument_cnt; | 963 Node* argument_cnt; |
967 | 964 |
968 if (!stopped()) { | 965 if (!stopped()) { |
966 // Properly cast the argument to String | |
967 argument = _gvn.transform(new (C, 2) CheckCastPPNode(control(), argument, string_type)); | |
968 | |
969 // Get counts for string and argument | 969 // Get counts for string and argument |
970 Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset); | 970 Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset); |
971 receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); | 971 receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); |
972 | 972 |
973 // Pin load from argument string since it could be NULL. | 973 // Pin load from argument string since it could be NULL. |
1088 const int value_offset = java_lang_String::value_offset_in_bytes(); | 1088 const int value_offset = java_lang_String::value_offset_in_bytes(); |
1089 const int count_offset = java_lang_String::count_offset_in_bytes(); | 1089 const int count_offset = java_lang_String::count_offset_in_bytes(); |
1090 const int offset_offset = java_lang_String::offset_offset_in_bytes(); | 1090 const int offset_offset = java_lang_String::offset_offset_in_bytes(); |
1091 | 1091 |
1092 ciInstanceKlass* klass = env()->String_klass(); | 1092 ciInstanceKlass* klass = env()->String_klass(); |
1093 const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0); | 1093 const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); |
1094 const TypeAryPtr* source_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::CHAR,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR), true, 0); | 1094 const TypeAryPtr* source_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::CHAR,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR), true, 0); |
1095 | 1095 |
1096 Node* sourceOffseta = basic_plus_adr(string_object, string_object, offset_offset); | 1096 Node* sourceOffseta = basic_plus_adr(string_object, string_object, offset_offset); |
1097 Node* sourceOffset = make_load(no_ctrl, sourceOffseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset)); | 1097 Node* sourceOffset = make_load(no_ctrl, sourceOffseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset)); |
1098 Node* sourceCounta = basic_plus_adr(string_object, string_object, count_offset); | 1098 Node* sourceCounta = basic_plus_adr(string_object, string_object, count_offset); |
1197 RegionNode* result_rgn = new (C, 3) RegionNode(3); | 1197 RegionNode* result_rgn = new (C, 3) RegionNode(3); |
1198 Node* result_phi = new (C, 3) PhiNode(result_rgn, TypeInt::INT); | 1198 Node* result_phi = new (C, 3) PhiNode(result_rgn, TypeInt::INT); |
1199 Node* no_ctrl = NULL; | 1199 Node* no_ctrl = NULL; |
1200 | 1200 |
1201 ciInstanceKlass* klass = env()->String_klass(); | 1201 ciInstanceKlass* klass = env()->String_klass(); |
1202 const TypeInstPtr* string_type = | 1202 const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); |
1203 TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0); | |
1204 | 1203 |
1205 // Get counts for string and substr | 1204 // Get counts for string and substr |
1206 Node* source_cnta = basic_plus_adr(receiver, receiver, count_offset); | 1205 Node* source_cnta = basic_plus_adr(receiver, receiver, count_offset); |
1207 Node* source_cnt = make_load(no_ctrl, source_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); | 1206 Node* source_cnt = make_load(no_ctrl, source_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); |
1208 | 1207 |