< prev index next >

src/share/vm/opto/library_call.cpp

Print this page




3436     PhiNode* result_io   = PhiNode::make(result_rgn, fast_io,  Type::ABIO);
3437 
3438     result_rgn->init_req(slow_result_path, control());
3439     result_io ->init_req(slow_result_path, i_o());
3440     result_mem->init_req(slow_result_path, reset_memory());
3441     result_val->init_req(slow_result_path, slow_val);
3442 
3443     set_all_memory(_gvn.transform(result_mem));
3444     set_i_o(       _gvn.transform(result_io));
3445   }
3446 
3447   C->set_has_split_ifs(true); // Has chance for split-if optimization
3448   set_result(result_rgn, result_val);
3449   return true;
3450 }
3451 
3452 //---------------------------load_mirror_from_klass----------------------------
3453 // Given a klass oop, load its java mirror (a java.lang.Class oop).
3454 Node* LibraryCallKit::load_mirror_from_klass(Node* klass) {
3455   Node* p = basic_plus_adr(klass, in_bytes(Klass::java_mirror_offset()));
3456   return make_load(NULL, p, TypeInstPtr::MIRROR, T_OBJECT, MemNode::unordered);

3457 }
3458 
3459 //-----------------------load_klass_from_mirror_common-------------------------
3460 // Given a java mirror (a java.lang.Class oop), load its corresponding klass oop.
3461 // Test the klass oop for null (signifying a primitive Class like Integer.TYPE),
3462 // and branch to the given path on the region.
3463 // If never_see_null, take an uncommon trap on null, so we can optimistically
3464 // compile for the non-null case.
3465 // If the region is NULL, force never_see_null = true.
3466 Node* LibraryCallKit::load_klass_from_mirror_common(Node* mirror,
3467                                                     bool never_see_null,
3468                                                     RegionNode* region,
3469                                                     int null_path,
3470                                                     int offset) {
3471   if (region == NULL)  never_see_null = true;
3472   Node* p = basic_plus_adr(mirror, offset);
3473   const TypeKlassPtr*  kls_type = TypeKlassPtr::OBJECT_OR_NULL;
3474   Node* kls = _gvn.transform(LoadKlassNode::make(_gvn, NULL, immutable_memory(), p, TypeRawPtr::BOTTOM, kls_type));
3475   Node* null_ctl = top();
3476   kls = null_check_oop(kls, &null_ctl, never_see_null);




3436     PhiNode* result_io   = PhiNode::make(result_rgn, fast_io,  Type::ABIO);
3437 
3438     result_rgn->init_req(slow_result_path, control());
3439     result_io ->init_req(slow_result_path, i_o());
3440     result_mem->init_req(slow_result_path, reset_memory());
3441     result_val->init_req(slow_result_path, slow_val);
3442 
3443     set_all_memory(_gvn.transform(result_mem));
3444     set_i_o(       _gvn.transform(result_io));
3445   }
3446 
3447   C->set_has_split_ifs(true); // Has chance for split-if optimization
3448   set_result(result_rgn, result_val);
3449   return true;
3450 }
3451 
3452 //---------------------------load_mirror_from_klass----------------------------
3453 // Given a klass oop, load its java mirror (a java.lang.Class oop).
3454 Node* LibraryCallKit::load_mirror_from_klass(Node* klass) {
3455   Node* p = basic_plus_adr(klass, in_bytes(Klass::java_mirror_offset()));
3456   Node* load = make_load(NULL, p, TypeRawPtr::NOTNULL, T_ADDRESS, MemNode::unordered);
3457   return make_load(NULL, load, TypeInstPtr::MIRROR, T_OBJECT, MemNode::unordered);
3458 }
3459 
3460 //-----------------------load_klass_from_mirror_common-------------------------
3461 // Given a java mirror (a java.lang.Class oop), load its corresponding klass oop.
3462 // Test the klass oop for null (signifying a primitive Class like Integer.TYPE),
3463 // and branch to the given path on the region.
3464 // If never_see_null, take an uncommon trap on null, so we can optimistically
3465 // compile for the non-null case.
3466 // If the region is NULL, force never_see_null = true.
3467 Node* LibraryCallKit::load_klass_from_mirror_common(Node* mirror,
3468                                                     bool never_see_null,
3469                                                     RegionNode* region,
3470                                                     int null_path,
3471                                                     int offset) {
3472   if (region == NULL)  never_see_null = true;
3473   Node* p = basic_plus_adr(mirror, offset);
3474   const TypeKlassPtr*  kls_type = TypeKlassPtr::OBJECT_OR_NULL;
3475   Node* kls = _gvn.transform(LoadKlassNode::make(_gvn, NULL, immutable_memory(), p, TypeRawPtr::BOTTOM, kls_type));
3476   Node* null_ctl = top();
3477   kls = null_check_oop(kls, &null_ctl, never_see_null);


< prev index next >