RFR(S) 8031743: C2: loadI2L_immI broken for negative memory values
vladimir.kozlov at oracle.com
Sat Jan 18 13:21:52 PST 2014
Integer positive fits into 31 bits not into 32.
On 1/18/14 1:18 PM, Igor Veresov wrote:
> We have this convention already in quite some places, so I was trying to follow it... For example on sparc there is immU13, which actually means simm13 & >= 0, which means it’s actually 12 bit. Likewise on ARM we have immURot that works that same way. So, the way these things go, I think, is that immUX means: fits in X bits and is positive.
> On Jan 18, 2014, at 1:02 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
>> immU32 name is not correct, it should be immU31.
>> Vladimir K
>> On 1/18/14 12:51 PM, Igor Veresov wrote:
>>> Transformation of (ConvI2L (AndI (LoadI mem) mask)) to (AndI (LoadUI2L (mem) mask) is only valid for positive mask, otherwise the sign extending effect of ConvI2L is missed. The solution is to restrict the optimization for the positive values of mask.
>>> Webrev: http://cr.openjdk.java.net/~iveresov/8031743/webrev.00/
>>> Testing: new regression test, jprt
More information about the hotspot-compiler-dev