922 LoadNode* ld = clone()->as_Load(); |
922 LoadNode* ld = clone()->as_Load(); |
923 Node* addp = in(MemNode::Address)->clone(); |
923 Node* addp = in(MemNode::Address)->clone(); |
924 if (ac->as_ArrayCopy()->is_clonebasic()) { |
924 if (ac->as_ArrayCopy()->is_clonebasic()) { |
925 assert(ld_alloc != NULL, "need an alloc"); |
925 assert(ld_alloc != NULL, "need an alloc"); |
926 assert(addp->is_AddP(), "address must be addp"); |
926 assert(addp->is_AddP(), "address must be addp"); |
927 assert(addp->in(AddPNode::Base) == ac->in(ArrayCopyNode::Dest)->in(AddPNode::Base), "strange pattern"); |
927 assert(ac->in(ArrayCopyNode::Dest)->is_AddP(), "dest must be an address"); |
928 assert(addp->in(AddPNode::Address) == ac->in(ArrayCopyNode::Dest)->in(AddPNode::Address), "strange pattern"); |
928 BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); |
|
929 assert(bs->step_over_gc_barrier(addp->in(AddPNode::Base)) == bs->step_over_gc_barrier(ac->in(ArrayCopyNode::Dest)->in(AddPNode::Base)), "strange pattern"); |
|
930 assert(bs->step_over_gc_barrier(addp->in(AddPNode::Address)) == bs->step_over_gc_barrier(ac->in(ArrayCopyNode::Dest)->in(AddPNode::Address)), "strange pattern"); |
929 addp->set_req(AddPNode::Base, src->in(AddPNode::Base)); |
931 addp->set_req(AddPNode::Base, src->in(AddPNode::Base)); |
930 addp->set_req(AddPNode::Address, src->in(AddPNode::Address)); |
932 addp->set_req(AddPNode::Address, src->in(AddPNode::Address)); |
931 } else { |
933 } else { |
932 assert(ac->as_ArrayCopy()->is_arraycopy_validated() || |
934 assert(ac->as_ArrayCopy()->is_arraycopy_validated() || |
933 ac->as_ArrayCopy()->is_copyof_validated() || |
935 ac->as_ArrayCopy()->is_copyof_validated() || |
1079 // Load boxed value from result of valueOf() call is input parameter. |
1081 // Load boxed value from result of valueOf() call is input parameter. |
1080 if (this->is_Load() && ld_adr->is_AddP() && |
1082 if (this->is_Load() && ld_adr->is_AddP() && |
1081 (tp != NULL) && tp->is_ptr_to_boxed_value()) { |
1083 (tp != NULL) && tp->is_ptr_to_boxed_value()) { |
1082 intptr_t ignore = 0; |
1084 intptr_t ignore = 0; |
1083 Node* base = AddPNode::Ideal_base_and_offset(ld_adr, phase, ignore); |
1085 Node* base = AddPNode::Ideal_base_and_offset(ld_adr, phase, ignore); |
|
1086 BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); |
|
1087 base = bs->step_over_gc_barrier(base); |
1084 if (base != NULL && base->is_Proj() && |
1088 if (base != NULL && base->is_Proj() && |
1085 base->as_Proj()->_con == TypeFunc::Parms && |
1089 base->as_Proj()->_con == TypeFunc::Parms && |
1086 base->in(0)->is_CallStaticJava() && |
1090 base->in(0)->is_CallStaticJava() && |
1087 base->in(0)->as_CallStaticJava()->is_boxing_method()) { |
1091 base->in(0)->as_CallStaticJava()->is_boxing_method()) { |
1088 return base->in(0)->in(TypeFunc::Parms); |
1092 return base->in(0)->in(TypeFunc::Parms); |