< prev index next >

src/hotspot/share/opto/castnode.cpp

Print this page

        

*** 416,426 **** in(1) != NULL && in(1)->is_Proj() && in(1)->in(0) != NULL && in(1)->in(0)->is_CallStaticJava() && in(1)->in(0)->as_CallStaticJava()->method() != NULL && in(1)->as_Proj()->_con == TypeFunc::Parms) { const TypeValueTypePtr* cast_type = type()->is_valuetypeptr(); ! ciValueKlass* vk = cast_type->value_type()->value_klass(); assert(!vk->is__Value(), "why cast to __Value?"); PhaseIterGVN* igvn = phase->is_IterGVN(); if (ValueTypeReturnedAsFields && vk->can_be_returned_as_fields()) { igvn->set_delay_transform(true); --- 416,426 ---- in(1) != NULL && in(1)->is_Proj() && in(1)->in(0) != NULL && in(1)->in(0)->is_CallStaticJava() && in(1)->in(0)->as_CallStaticJava()->method() != NULL && in(1)->as_Proj()->_con == TypeFunc::Parms) { const TypeValueTypePtr* cast_type = type()->is_valuetypeptr(); ! ciValueKlass* vk = cast_type->value_klass(); assert(!vk->is__Value(), "why cast to __Value?"); PhaseIterGVN* igvn = phase->is_IterGVN(); if (ValueTypeReturnedAsFields && vk->can_be_returned_as_fields()) { igvn->set_delay_transform(true);
*** 492,502 **** Node* ex_io_phi = new PhiNode(ex_region, Type::ABIO); // True branch: result is a tagged klass pointer // Allocate a value type (will add extra projections to the call) kit.set_control(iftrue); ! Node* res = igvn->transform(ValueTypePtrNode::make(&kit, vk, call)); res = res->isa_ValueTypePtr()->allocate(&kit); // Get exception state GraphKit ekit(kit.transfer_exceptions_into_jvms(), igvn); SafePointNode* ex_map = ekit.combine_and_pop_all_exception_states(); --- 492,502 ---- Node* ex_io_phi = new PhiNode(ex_region, Type::ABIO); // True branch: result is a tagged klass pointer // Allocate a value type (will add extra projections to the call) kit.set_control(iftrue); ! Node* res = igvn->transform(ValueTypePtrNode::make_from_call(&kit, vk, call)); res = res->isa_ValueTypePtr()->allocate(&kit); // Get exception state GraphKit ekit(kit.transfer_exceptions_into_jvms(), igvn); SafePointNode* ex_map = ekit.combine_and_pop_all_exception_states();
*** 519,529 **** ConstraintCastNode* res_cast = clone()->as_ConstraintCast(); res_cast->set_req(0, kit.control()); res_cast->set_req(1, projs.resproj); res_cast->set_type(cast_type->cast_to_ptr_type(TypePtr::NotNull)); Node* ctl = kit.control(); // Control may get updated below ! res = ValueTypePtrNode::make(*igvn, ctl, kit.merged_memory(), igvn->transform(res_cast)); region->init_req(2, ctl); mem_phi->init_req(2, kit.reset_memory()); io_phi->init_req(2, kit.i_o()); res_phi->init_req(2, igvn->transform(res)); --- 519,529 ---- ConstraintCastNode* res_cast = clone()->as_ConstraintCast(); res_cast->set_req(0, kit.control()); res_cast->set_req(1, projs.resproj); res_cast->set_type(cast_type->cast_to_ptr_type(TypePtr::NotNull)); Node* ctl = kit.control(); // Control may get updated below ! res = ValueTypePtrNode::make_from_oop(*igvn, ctl, kit.merged_memory(), igvn->transform(res_cast)); region->init_req(2, ctl); mem_phi->init_req(2, kit.reset_memory()); io_phi->init_req(2, kit.i_o()); res_phi->init_req(2, igvn->transform(res));
*** 559,569 **** call->extract_projections(&projs, true, true); Node* ctl = projs.fallthrough_catchproj; Node* mem = projs.fallthrough_memproj; Node* ctl_hook = new Node(1); igvn->replace_in_uses(ctl, ctl_hook); ! Node* vtptr = ValueTypePtrNode::make(*phase, ctl, mem, in(1)); // Attach users to updated control igvn->replace_node(ctl_hook, ctl); return vtptr; } } --- 559,569 ---- call->extract_projections(&projs, true, true); Node* ctl = projs.fallthrough_catchproj; Node* mem = projs.fallthrough_memproj; Node* ctl_hook = new Node(1); igvn->replace_in_uses(ctl, ctl_hook); ! Node* vtptr = ValueTypePtrNode::make_from_oop(*phase, ctl, mem, in(1)); // Attach users to updated control igvn->replace_node(ctl_hook, ctl); return vtptr; } }
< prev index next >