src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/StampFactory.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/StampFactory.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/StampFactory.java
Print this page
*** 20,29 ****
--- 20,32 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.graalvm.compiler.core.common.type;
+ import static jdk.vm.ci.code.CodeUtil.signExtend;
+
+ import org.graalvm.compiler.core.common.NumUtil;
import org.graalvm.compiler.debug.GraalError;
import jdk.vm.ci.code.CodeUtil;
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.JavaConstant;
*** 54,63 ****
--- 57,71 ----
@Override
public boolean equals(Object obj) {
return this == obj;
}
+
+ @Override
+ public String toString() {
+ return "NodeIntrinsicStamp";
+ }
}
// JaCoCo Exclude
private static final Stamp[] stampCache = new Stamp[JavaKind.values().length];
*** 80,90 ****
if (kind.isUnsigned()) {
mask = CodeUtil.mask(kind.getBitCount());
} else {
mask = CodeUtil.mask(bits);
}
! setCache(kind, new IntegerStamp(bits, kind.getMinValue(), kind.getMaxValue(), 0, mask));
}
private static void setFloatCache(JavaKind kind) {
setCache(kind, new FloatStamp(kind.getBitCount()));
}
--- 88,98 ----
if (kind.isUnsigned()) {
mask = CodeUtil.mask(kind.getBitCount());
} else {
mask = CodeUtil.mask(bits);
}
! setCache(kind, IntegerStamp.create(bits, kind.getMinValue(), kind.getMaxValue(), 0, mask));
}
private static void setFloatCache(JavaKind kind) {
setCache(kind, new FloatStamp(kind.getBitCount()));
}
*** 154,164 ****
public static Stamp empty(JavaKind kind) {
return emptyStampCache[kind.ordinal()];
}
public static IntegerStamp forInteger(JavaKind kind, long lowerBound, long upperBound, long downMask, long upMask) {
! return new IntegerStamp(kind.getBitCount(), lowerBound, upperBound, downMask, upMask);
}
public static IntegerStamp forInteger(JavaKind kind, long lowerBound, long upperBound) {
return forInteger(kind.getBitCount(), lowerBound, upperBound);
}
--- 162,172 ----
public static Stamp empty(JavaKind kind) {
return emptyStampCache[kind.ordinal()];
}
public static IntegerStamp forInteger(JavaKind kind, long lowerBound, long upperBound, long downMask, long upMask) {
! return IntegerStamp.create(kind.getBitCount(), lowerBound, upperBound, downMask, upMask);
}
public static IntegerStamp forInteger(JavaKind kind, long lowerBound, long upperBound) {
return forInteger(kind.getBitCount(), lowerBound, upperBound);
}
*** 174,223 ****
* @param maskStamp
* @return a new stamp with the appropriate bounds and masks
*/
public static IntegerStamp forIntegerWithMask(int bits, long newLowerBound, long newUpperBound, IntegerStamp maskStamp) {
IntegerStamp limit = StampFactory.forInteger(bits, newLowerBound, newUpperBound);
! return new IntegerStamp(bits, newLowerBound, newUpperBound, limit.downMask() | maskStamp.downMask(), limit.upMask() & maskStamp.upMask());
}
public static IntegerStamp forIntegerWithMask(int bits, long newLowerBound, long newUpperBound, long newDownMask, long newUpMask) {
IntegerStamp limit = StampFactory.forInteger(bits, newLowerBound, newUpperBound);
! return new IntegerStamp(bits, newLowerBound, newUpperBound, limit.downMask() | newDownMask, limit.upMask() & newUpMask);
}
public static IntegerStamp forInteger(int bits) {
! return new IntegerStamp(bits, CodeUtil.minValue(bits), CodeUtil.maxValue(bits), 0, CodeUtil.mask(bits));
}
! public static IntegerStamp forInteger(int bits, long lowerBound, long upperBound) {
! long defaultMask = CodeUtil.mask(bits);
! if (lowerBound == upperBound) {
! return new IntegerStamp(bits, lowerBound, lowerBound, lowerBound & defaultMask, lowerBound & defaultMask);
! }
! final long downMask;
! final long upMask;
! if (lowerBound >= 0) {
! int upperBoundLeadingZeros = Long.numberOfLeadingZeros(upperBound);
! long differentBits = lowerBound ^ upperBound;
! int sameBitCount = Long.numberOfLeadingZeros(differentBits << upperBoundLeadingZeros);
!
! upMask = upperBound | -1L >>> (upperBoundLeadingZeros + sameBitCount);
! downMask = upperBound & ~(-1L >>> (upperBoundLeadingZeros + sameBitCount));
! } else {
! if (upperBound >= 0) {
! upMask = defaultMask;
! downMask = 0;
! } else {
! int lowerBoundLeadingOnes = Long.numberOfLeadingZeros(~lowerBound);
! long differentBits = lowerBound ^ upperBound;
! int sameBitCount = Long.numberOfLeadingZeros(differentBits << lowerBoundLeadingOnes);
! upMask = lowerBound | -1L >>> (lowerBoundLeadingOnes + sameBitCount) | ~(-1L >>> lowerBoundLeadingOnes);
! downMask = lowerBound & ~(-1L >>> (lowerBoundLeadingOnes + sameBitCount)) | ~(-1L >>> lowerBoundLeadingOnes);
}
}
! return new IntegerStamp(bits, lowerBound, upperBound, downMask & defaultMask, upMask & defaultMask);
}
public static FloatStamp forFloat(JavaKind kind, double lowerBound, double upperBound, boolean nonNaN) {
assert kind.isNumericFloat();
return new FloatStamp(kind.getBitCount(), lowerBound, upperBound, nonNaN);
--- 182,220 ----
* @param maskStamp
* @return a new stamp with the appropriate bounds and masks
*/
public static IntegerStamp forIntegerWithMask(int bits, long newLowerBound, long newUpperBound, IntegerStamp maskStamp) {
IntegerStamp limit = StampFactory.forInteger(bits, newLowerBound, newUpperBound);
! return IntegerStamp.create(bits, newLowerBound, newUpperBound, limit.downMask() | maskStamp.downMask(), limit.upMask() & maskStamp.upMask());
}
public static IntegerStamp forIntegerWithMask(int bits, long newLowerBound, long newUpperBound, long newDownMask, long newUpMask) {
IntegerStamp limit = StampFactory.forInteger(bits, newLowerBound, newUpperBound);
! return IntegerStamp.create(bits, newLowerBound, newUpperBound, limit.downMask() | newDownMask, limit.upMask() & newUpMask);
}
public static IntegerStamp forInteger(int bits) {
! return IntegerStamp.create(bits, CodeUtil.minValue(bits), CodeUtil.maxValue(bits), 0, CodeUtil.mask(bits));
}
! public static IntegerStamp forUnsignedInteger(int bits, long unsignedLowerBound, long unsignedUpperBound) {
! return forUnsignedInteger(bits, unsignedLowerBound, unsignedUpperBound, 0, CodeUtil.mask(bits));
! }
! public static IntegerStamp forUnsignedInteger(int bits, long unsignedLowerBound, long unsignedUpperBound, long downMask, long upMask) {
! long lowerBound = signExtend(unsignedLowerBound, bits);
! long upperBound = signExtend(unsignedUpperBound, bits);
! if (!NumUtil.sameSign(lowerBound, upperBound)) {
! lowerBound = CodeUtil.minValue(bits);
! upperBound = CodeUtil.maxValue(bits);
}
+ long mask = CodeUtil.mask(bits);
+ return IntegerStamp.create(bits, lowerBound, upperBound, downMask & mask, upMask & mask);
}
!
! public static IntegerStamp forInteger(int bits, long lowerBound, long upperBound) {
! return IntegerStamp.create(bits, lowerBound, upperBound, 0, CodeUtil.mask(bits));
}
public static FloatStamp forFloat(JavaKind kind, double lowerBound, double upperBound, boolean nonNaN) {
assert kind.isNumericFloat();
return new FloatStamp(kind.getBitCount(), lowerBound, upperBound, nonNaN);
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/StampFactory.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File