Request for reviews (M): 6873116: Modify reexecute implementation to use pcDesc to record the reexecute bit
Changpeng Fang
Changpeng.Fang at Sun.COM
Wed Aug 19 15:59:56 PDT 2009
I am doing this now, and will send out the webrev soon.
Thanks,
Changpeng
On 08/19/09 15:57, Tom Rodriguez wrote:
> The only use of the objects() method is in deopt so it seems pretty
> straightforwards but it doesn't have to happen now. However you want
> to handle it is fine.
>
> tom
>
> On Aug 19, 2009, at 3:22 PM, Vladimir Kozlov wrote:
>
>> Currently I am not sure that it is the only place where we need
>> object values.
>> This is why I don't want to rush with this change.
>>
>> Vladimir
>>
>> changpeng fang - Sun Microsystems - Santa Clara United States wrote:
>>> On 08/19/09 15:09, Vladimir Kozlov wrote:
>>>> No. What Tom talks about is to do it only in
>>>> Deoptimization::fetch_unroll_info_helper().
>>>> In other cases we will generate just empty ObjectValue(id).
>>>>
>>> Yes, I saw that only use:
>>> GrowableArray<ScopeValue*>* objects = chunk->at(0)->scope()->objects();
>>> Can we do it in this way:
>>> GrowableArray<ScopeValue*>* objects =
>>> chunk->at(0)->scope()->decode_object_values();
>>> i.e. we only decode the object when necessary, and don't do it in
>>> the constructor?
>>> Maybe we need to remember the offset.
>>> Thanks,
>>> Changpeng
>>>> Vladimir
>>>>
>>>> changpeng fang - Sun Microsystems - Santa Clara United States wrote:
>>>>>
>>>>> Is this the approach to make it lazy? Thanks. -- Changpeng
>>>>>
>>>>>
>>>>> diff -r d0acbc302e14 src/share/vm/code/scopeDesc.cpp
>>>>> --- a/src/share/vm/code/scopeDesc.cpp Mon Aug 17 14:45:02 2009
>>>>> -0700
>>>>> +++ b/src/share/vm/code/scopeDesc.cpp Wed Aug 19 14:49:27 2009
>>>>> -0700
>>>>> @@ -90,16 +90,21 @@ GrowableArray<ScopeValue*>* ScopeDesc::d
>>>>>
>>>>> GrowableArray<ScopeValue*>* ScopeDesc::decode_object_values(int
>>>>> decode_offset) {
>>>>> if (decode_offset == DebugInformationRecorder::serialized_null)
>>>>> return NULL;
>>>>> - GrowableArray<ScopeValue*>* result = new
>>>>> GrowableArray<ScopeValue*>();
>>>>> - DebugInfoReadStream* stream = new DebugInfoReadStream(_code,
>>>>> decode_offset, result);
>>>>> - int length = stream->read_int();
>>>>> - for (int index = 0; index < length; index++) {
>>>>> - // Objects values are pushed to 'result' array during read so
>>>>> that
>>>>> - // object's fields could reference it (OBJECT_ID_CODE).
>>>>> - (void)ScopeValue::read_from(stream);
>>>>> +#ifdef COMPILER2
>>>>> + if (DoEscapeAnalysis && EliminateAllocations) {
>>>>> + GrowableArray<ScopeValue*>* result = new
>>>>> GrowableArray<ScopeValue*>();
>>>>> + DebugInfoReadStream* stream = new DebugInfoReadStream(_code,
>>>>> decode_offset, result);
>>>>> + int length = stream->read_int();
>>>>> + for (int index = 0; index < length; index++) {
>>>>> + // Objects values are pushed to 'result' array during read
>>>>> so that
>>>>> + // object's fields could reference it (OBJECT_ID_CODE).
>>>>> + (void)ScopeValue::read_from(stream);
>>>>> + }
>>>>> + assert(result->length() == length, "inconsistent debug
>>>>> information");
>>>>> + return result;
>>>>> }
>>>>> - assert(result->length() == length, "inconsistent debug
>>>>> information");
>>>>> - return result;
>>>>> +#endif
>>>>> + return NULL;
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> Tom Rodriguez wrote:
>>>>>>> By the way, does anyone know why the objects for EA are decoded
>>>>>>> eagerly instead of being decoded lazily like all the other debug
>>>>>>> info? That seems like unneeded overhead for most uses of
>>>>>>> ScopeDesc for stack walking.
>>>>>>
>>>>>> Do you mean the call to decode_object_values()?
>>>>>> It is done only for top frame.
>>>>>> But you are right that we may need to call it only when we
>>>>>> need to decode narrow oop. I will look on it.
>>>>>>
>>>>>> Vladimir
>>>>>>
>>>>>>>
>>>>>>> tom
>>>>>>>
>>>>>
>
More information about the hotspot-compiler-dev
mailing list