(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