(Please) Re: Request for review (S): 6833879 Assigning positive zero is ignored when old value is negative zero

Tom Rodriguez Thomas.Rodriguez at Sun.COM
Mon May 4 16:44:32 PDT 2009


ok by me.

tom

On May 4, 2009, at 4:42 PM, Changpeng Fang wrote:

> On 05/04/09 16:33, Tom Rodriguez wrote:
>> Actually we can allow this transformation when the value being  
>> tested is any constant besides 0.0, right?
>>
> I think for floating point, the cases that t==f?t:f is very limited
> so, disabling this identity optimization would have limited  
> performance impact
> for java programs. And this is also the reason we
> don't bother to recognize the non-zero constant cases.
>
> Thanks,
>
> Changpeng
>
>
>
>> tom
>>
>> On May 4, 2009, at 4:23 PM, Tom Rodriguez wrote:
>>
>>> It feels a bit extreme but I don't see how we can ignore that it  
>>> produces the wrong result dynamically.
>>>
>>> tom
>>>
>>> On May 4, 2009, at 2:44 PM, Changpeng Fang wrote:
>>>
>>>> On 05/01/09 11:30, Changpeng Fang wrote:
>>>>
>>>> http://cr.openjdk.java.net/~cfang/6833879/webrev.01/
>>>>>
>>>>> I have updated the fix to disable the identity optimization for  
>>>>> all floating point
>>>>> comparison  (i.e.,  is_cmove_id always returns NULL for flaot  
>>>>> and double).
>>>>>
>>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Changpeng
>>>>
>>>>
>>>>> Thanks,
>>>>>
>>>>> Changpeng
>>>>>
>>>>>
>>>>>
>>>>> On 04/29/09 12:32, Tom Rodriguez wrote:
>>>>>> BTW, you can use TypeF::ZERO and TypeD::ZERO to check for  
>>>>>> positive zero constants instead of breaking them down, as in  
>>>>>> phase->type(f) == TypeF::ZERO.  I don't think this fix is  
>>>>>> sufficient.  It has the same problem for "if (v == -0.0f) v ==  
>>>>>> -0.0f" and as you said originally it won't work right  
>>>>>> dynamically either.
>>>>>>
>>>>>> tom
>>>>>>
>>>>>> On Apr 29, 2009, at 10:59 AM, Changpeng Fang wrote:
>>>>>>
>>>>>>> http://cr.openjdk.java.net/~cfang/6833879/webrev.00/
>>>>>>>
>>>>>>> Problem:
>>>>>>> For the following case:
>>>>>>> public static double normalize(float v) {
>>>>>>>    if (v == 0.0f) v = 0.0f;
>>>>>>>    return v;
>>>>>>> }
>>>>>>> If -0.0 is passed, 0.0 is expected to be returned (it is the  
>>>>>>> case for the interpreter). However,
>>>>>>> PhiNode::Identity optimized away the "if and assignment"  
>>>>>>> statement and the server vm
>>>>>>> return -0.0.
>>>>>>>
>>>>>>> Proposed Solution:
>>>>>>> Don't perform this kind of identity optimization if either  
>>>>>>> true path or false path is constant
>>>>>>> 0.0 or (-0.0)
>>>>>>>
>>>>>>> Open Issue:
>>>>>>> When the true path or false path is not constant, it may still  
>>>>>>> be 0.0 (-0.0) at run time.
>>>>>>> Do we have to turn off this identity optimization completely   
>>>>>>> for float  and double (except
>>>>>>> for constant non-zeros)?
>>>>>>> Tests: Passed the test case in the CR report.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Changpeng
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>




More information about the hotspot-compiler-dev mailing list