Request for reviews (M): 6964479: widen normalization of small int and long values should be symmetric
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).
On Jun 25, 2010, at 5:03 PM, Vladimir Kozlov wrote:
> 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");
> 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