Request for reviews (M): 6964479: widen normalization of small int and long values should be symmetric
vladimir.kozlov at oracle.com
Fri Jun 25 17:03:53 PDT 2010
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