(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:33:36 PDT 2009


Actually we can allow this transformation when the value being tested  
is any constant besides 0.0, right?

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