comparison src/share/vm/graal/graalCompiler.cpp @ 13375:e8c4a6ea3f77

cleaned up VMToCompiler.createResolvedJavaType
author twisti
date Tue, 17 Dec 2013 20:58:58 -0800
parents 430c9f08728d
children 606959535fd4
comparison
equal deleted inserted replaced
13374:ad187607b784 13375:e8c4a6ea3f77
217 // Print compilation timers and statistics 217 // Print compilation timers and statistics
218 void GraalCompiler::print_timers() { 218 void GraalCompiler::print_timers() {
219 TRACE_graal_1("GraalCompiler::print_timers"); 219 TRACE_graal_1("GraalCompiler::print_timers");
220 } 220 }
221 221
222 Handle GraalCompiler::get_JavaType(Symbol* klass_name, TRAPS) {
223 return VMToCompiler::createUnresolvedJavaType(java_lang_String::create_from_symbol(klass_name, THREAD), THREAD);
224 }
225
226 Handle GraalCompiler::get_JavaTypeFromSignature(Symbol* signature, KlassHandle loading_klass, TRAPS) { 222 Handle GraalCompiler::get_JavaTypeFromSignature(Symbol* signature, KlassHandle loading_klass, TRAPS) {
227
228 BasicType field_type = FieldType::basic_type(signature); 223 BasicType field_type = FieldType::basic_type(signature);
229 // If the field is a pointer type, get the klass of the 224 // If the field is a pointer type, get the klass of the
230 // field. 225 // field.
231 if (field_type == T_OBJECT || field_type == T_ARRAY) { 226 if (field_type == T_OBJECT || field_type == T_ARRAY) {
232 KlassHandle handle = GraalEnv::get_klass_by_name(loading_klass, signature, false); 227 KlassHandle klass = GraalEnv::get_klass_by_name(loading_klass, signature, false);
233 if (handle.is_null()) { 228 if (klass.is_null()) {
234 return get_JavaType(signature, CHECK_NH); 229 Handle signature_string = java_lang_String::create_from_symbol(signature, CHECK_NH);
230 return VMToCompiler::createUnresolvedJavaType(signature_string, CHECK_NH);
235 } else { 231 } else {
236 return get_JavaType(handle, CHECK_NH); 232 return createHotSpotResolvedObjectType(klass, CHECK_NH);
237 } 233 }
238 } else { 234 } else {
239 return VMToCompiler::createPrimitiveJavaType(field_type, CHECK_NH); 235 return VMToCompiler::createPrimitiveJavaType(field_type, CHECK_NH);
240 } 236 }
241 } 237 }
254 MonitorLockerEx ml(cp->lock()); 250 MonitorLockerEx ml(cp->lock());
255 constantTag tag = cp->tag_at(index); 251 constantTag tag = cp->tag_at(index);
256 if (tag.is_klass()) { 252 if (tag.is_klass()) {
257 // The klass has been inserted into the constant pool 253 // The klass has been inserted into the constant pool
258 // very recently. 254 // very recently.
259 return GraalCompiler::get_JavaType(cp->resolved_klass_at(index), CHECK_NH); 255 return GraalCompiler::createHotSpotResolvedObjectType(cp->resolved_klass_at(index), CHECK_NH);
260 } else if (tag.is_symbol()) { 256 } else if (tag.is_symbol()) {
261 klass_name = cp->symbol_at(index); 257 klass_name = cp->symbol_at(index);
262 } else { 258 } else {
263 assert(cp->tag_at(index).is_unresolved_klass(), "wrong tag"); 259 assert(cp->tag_at(index).is_unresolved_klass(), "wrong tag");
264 klass_name = cp->unresolved_klass_at(index); 260 klass_name = cp->unresolved_klass_at(index);
265 } 261 }
266 } 262 }
267 return GraalCompiler::get_JavaType(klass_name, CHECK_NH); 263 Handle klass_name_string = java_lang_String::create_from_symbol(klass_name, CHECK_NH);
264 return VMToCompiler::createUnresolvedJavaType(klass_name_string, CHECK_NH);
268 } else { 265 } else {
269 return GraalCompiler::get_JavaType(klass, CHECK_NH); 266 return GraalCompiler::createHotSpotResolvedObjectType(klass, CHECK_NH);
270 } 267 }
271 }
272
273 Handle GraalCompiler::get_JavaType(KlassHandle klass, TRAPS) {
274 Handle name = java_lang_String::create_from_symbol(klass->name(), THREAD);
275 return createHotSpotResolvedObjectType(klass, name, CHECK_NH);
276 } 268 }
277 269
278 Handle GraalCompiler::get_JavaField(int offset, int flags, Symbol* field_name, Handle field_holder, Handle field_type, TRAPS) { 270 Handle GraalCompiler::get_JavaField(int offset, int flags, Symbol* field_name, Handle field_holder, Handle field_type, TRAPS) {
279 Handle name = java_lang_String::create_from_symbol(field_name, CHECK_NH); 271 Handle name = java_lang_String::create_from_symbol(field_name, CHECK_NH);
280 return VMToCompiler::createJavaField(field_holder, name, field_type, offset, flags, false, CHECK_NH); 272 return VMToCompiler::createJavaField(field_holder, name, field_type, offset, flags, false, CHECK_NH);
281 } 273 }
282 274
283 Handle GraalCompiler::createHotSpotResolvedObjectType(KlassHandle klass, Handle name, TRAPS) { 275 Handle GraalCompiler::createHotSpotResolvedObjectType(KlassHandle klass, TRAPS) {
284 oop java_class = klass->java_mirror(); 276 oop java_class = klass->java_mirror();
285 oop graal_mirror = java_lang_Class::graal_mirror(java_class); 277 oop graal_mirror = java_lang_Class::graal_mirror(java_class);
286 if (graal_mirror != NULL) { 278 if (graal_mirror != NULL) {
287 assert(graal_mirror->is_a(HotSpotResolvedObjectType::klass()), "unexpected class..."); 279 assert(graal_mirror->is_a(HotSpotResolvedObjectType::klass()), "unexpected class...");
288 return graal_mirror; 280 return graal_mirror;
289 } 281 }
290 282 return VMToCompiler::createResolvedJavaType(java_class, CHECK_NH);
291 Handle simpleName = name;
292 if (klass->oop_is_instance()) {
293 ResourceMark rm;
294 InstanceKlass* ik = (InstanceKlass*) klass();
295 name = java_lang_String::create_from_str(ik->signature_name(), CHECK_NH);
296 }
297
298 int sizeOrSpecies;
299 if (klass->is_interface()) {
300 sizeOrSpecies = (int) 0x80000000; // see HotSpotResolvedObjectType.INTERFACE_SPECIES_VALUE
301 } else if (klass->oop_is_array()) {
302 sizeOrSpecies = (int) 0x7fffffff; // see HotSpotResolvedObjectType.ARRAY_SPECIES_VALUE
303 } else {
304 sizeOrSpecies = InstanceKlass::cast(klass())->size_helper() * HeapWordSize;
305 if (!InstanceKlass::cast(klass())->can_be_fastpath_allocated()) {
306 sizeOrSpecies = -sizeOrSpecies;
307 }
308 }
309
310 return VMToCompiler::createResolvedJavaType(klass(), name, simpleName, java_class, sizeOrSpecies, CHECK_NH);
311 } 283 }
312 284
313 BasicType GraalCompiler::kindToBasicType(jchar ch) { 285 BasicType GraalCompiler::kindToBasicType(jchar ch) {
314 switch(ch) { 286 switch(ch) {
315 case 'z': return T_BOOLEAN; 287 case 'z': return T_BOOLEAN;