src/hotspot/share/opto/macro.cpp
changeset 57582 a79a819a8218
parent 55541 700ef5241888
child 57664 1d2ea8db7083
equal deleted inserted replaced
57581:57a391a23f7f 57582:a79a819a8218
   349   Node* res = NULL;
   349   Node* res = NULL;
   350   if (ac->is_clonebasic()) {
   350   if (ac->is_clonebasic()) {
   351     Node* base = ac->in(ArrayCopyNode::Src)->in(AddPNode::Base);
   351     Node* base = ac->in(ArrayCopyNode::Src)->in(AddPNode::Base);
   352     Node* adr = _igvn.transform(new AddPNode(base, base, MakeConX(offset)));
   352     Node* adr = _igvn.transform(new AddPNode(base, base, MakeConX(offset)));
   353     const TypePtr* adr_type = _igvn.type(base)->is_ptr()->add_offset(offset);
   353     const TypePtr* adr_type = _igvn.type(base)->is_ptr()->add_offset(offset);
   354     res = LoadNode::make(_igvn, ctl, mem, adr, adr_type, type, bt, MemNode::unordered, LoadNode::Pinned);
   354     res = LoadNode::make(_igvn, ctl, mem, adr, adr_type, type, bt, MemNode::unordered, LoadNode::UnknownControl);
   355   } else {
   355   } else {
   356     if (ac->modifies(offset, offset, &_igvn, true)) {
   356     if (ac->modifies(offset, offset, &_igvn, true)) {
   357       assert(ac->in(ArrayCopyNode::Dest) == alloc->result_cast(), "arraycopy destination should be allocation's result");
   357       assert(ac->in(ArrayCopyNode::Dest) == alloc->result_cast(), "arraycopy destination should be allocation's result");
   358       uint shift  = exact_log2(type2aelembytes(bt));
   358       uint shift  = exact_log2(type2aelembytes(bt));
   359       Node* diff = _igvn.transform(new SubINode(ac->in(ArrayCopyNode::SrcPos), ac->in(ArrayCopyNode::DestPos)));
   359       Node* diff = _igvn.transform(new SubINode(ac->in(ArrayCopyNode::SrcPos), ac->in(ArrayCopyNode::DestPos)));
   364 
   364 
   365       Node* off = _igvn.transform(new AddXNode(MakeConX(offset), diff));
   365       Node* off = _igvn.transform(new AddXNode(MakeConX(offset), diff));
   366       Node* base = ac->in(ArrayCopyNode::Src);
   366       Node* base = ac->in(ArrayCopyNode::Src);
   367       Node* adr = _igvn.transform(new AddPNode(base, base, off));
   367       Node* adr = _igvn.transform(new AddPNode(base, base, off));
   368       const TypePtr* adr_type = _igvn.type(base)->is_ptr()->add_offset(offset);
   368       const TypePtr* adr_type = _igvn.type(base)->is_ptr()->add_offset(offset);
   369       res = LoadNode::make(_igvn, ctl, mem, adr, adr_type, type, bt, MemNode::unordered, LoadNode::Pinned);
   369       res = LoadNode::make(_igvn, ctl, mem, adr, adr_type, type, bt, MemNode::unordered, LoadNode::UnknownControl);
   370     }
   370     }
   371   }
   371   }
   372   if (res != NULL) {
   372   if (res != NULL) {
   373     res = _igvn.transform(res);
   373     res = _igvn.transform(res);
   374     if (ftype->isa_narrowoop()) {
   374     if (ftype->isa_narrowoop()) {