Request for reviews (M): 6964479: widen normalization of small int and long values should be symmetric

Vladimir Kozlov vladimir.kozlov at oracle.com
Sat Jun 26 01:53:51 PDT 2010


Thank you, John

You are right, I miscalculated. It seems, I got failures with it because I did not set correctly widen value for dual. I 
updated webrev with normalizations for TypeInt::INT (and LONG).

http://cr.openjdk.java.net/~kvn/6964479/webrev.01

Thanks,
Vladimir

On 6/26/10 12:02 AM, John Rose wrote:
> Reviewed.  It is an improvement; thanks.
>
> But... The removal of the WidenMax case puzzles me.  I don't see how it interacts with SYMINT, since SYMINT.hi - SYMINT.lo == juint_max-1.  The intention there IIRC was simply to avoid narrow versions of TypeInt::INT (and LONG).
>
> -- John
>
> On Jun 25, 2010, at 5:03 PM, Vladimir Kozlov wrote:
>
>> http://cr.openjdk.java.net/~kvn/6964479/webrev
>>
>> Fixed 6964479: widen normalization of small int and long values should be symmetric
>>
>> This issue was found during work on signflip problem.
>>
>> PhaseCCP::saturate(), used by PhiNode::Value(), calls
>> TypeInt::widen() which may call TypeInt::make() which
>> normalizes small ints. On other hand TypeInt::xmeet() does not
>> call TypeInt::make() and does not normalizes small ints.
>> It may trigger next assert during CCP:
>>
>> Current function is ccp_type_widens
>> 1314     assert(t->meet(t0) == t, "Not monotonic");
>>
>> Solution:
>> Call TypeInt::make() from TypeInt::xmeet() and normalize small
>> ints in TypeInt::xdual() so the type meet will be symmetric.
>> Remove normalization of big value since it was in conflict
>> with SYMINT type. The same was done for long type.
>>
>> Passed CTW, JPRT, passed original test with signflip changes.
>>
>


More information about the hotspot-compiler-dev mailing list