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);
|