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

John Rose john.r.rose at oracle.com
Sat Jun 26 00:02:29 PDT 2010


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