Request for review (S): 6833879 Assigning positive zero is ignored when old value is negative zero
Changpeng Fang
Changpeng.Fang at Sun.COM
Wed Apr 29 12:17:56 PDT 2009
On 04/29/09 12:04, john cuthbertson - Sun Microsystems wrote:
> Hi Changpeng,
>
> Is it not possible to compare the unsigned hex patterns for the values
> in t & f using a couple of union and only remove the if and assignment
> iff the hex patterns are equal?
I don't think so. At least one of t and f is not constant.
Thanks,
Changpeng
> JohnC
>
> Tom Rodriguez wrote:
>> I think it's just an illegal identity transform. We have another
>> similar one 6796786 that I looked at. In that case we transform - (a
>> - b) into b - a but that gives the wrong zero when a == b.
>>
>> 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