hotspot/src/share/vm/opto/macro.cpp
changeset 767 64fb1fd7186d
parent 762 1b26adb5fea1
child 769 78e5090c7a20
equal deleted inserted replaced
766:d3e5868ddb33 767:64fb1fd7186d
   596           assert(field_type != NULL, "field singleton type must be consistent");
   596           assert(field_type != NULL, "field singleton type must be consistent");
   597         } else {
   597         } else {
   598           field_type = TypeOopPtr::make_from_klass(elem_type->as_klass());
   598           field_type = TypeOopPtr::make_from_klass(elem_type->as_klass());
   599         }
   599         }
   600         if (UseCompressedOops) {
   600         if (UseCompressedOops) {
   601           field_type = field_type->is_oopptr()->make_narrowoop();
   601           field_type = field_type->make_narrowoop();
   602           basic_elem_type = T_NARROWOOP;
   602           basic_elem_type = T_NARROWOOP;
   603         }
   603         }
   604       } else {
   604       } else {
   605         field_type = Type::get_const_basic_type(basic_elem_type);
   605         field_type = Type::get_const_basic_type(basic_elem_type);
   606       }
   606       }
   664         return false;
   664         return false;
   665       }
   665       }
   666       if (UseCompressedOops && field_type->isa_narrowoop()) {
   666       if (UseCompressedOops && field_type->isa_narrowoop()) {
   667         // Enable "DecodeN(EncodeP(Allocate)) --> Allocate" transformation
   667         // Enable "DecodeN(EncodeP(Allocate)) --> Allocate" transformation
   668         // to be able scalar replace the allocation.
   668         // to be able scalar replace the allocation.
   669         _igvn.set_delay_transform(false);
   669         if (field_val->is_EncodeP()) {
   670         field_val = DecodeNNode::decode(&_igvn, field_val);
   670           field_val = field_val->in(1);
   671         _igvn.set_delay_transform(true);
   671         } else {
       
   672           field_val = transform_later(new (C, 2) DecodeNNode(field_val, field_val->bottom_type()->make_ptr()));
       
   673         }
   672       }
   674       }
   673       sfpt->add_req(field_val);
   675       sfpt->add_req(field_val);
   674     }
   676     }
   675     JVMState *jvms = sfpt->jvms();
   677     JVMState *jvms = sfpt->jvms();
   676     jvms->set_endoff(sfpt->req());
   678     jvms->set_endoff(sfpt->req());