src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/IntegerStamp.java
changeset 58877 aec7bf35d6f5
parent 58299 6df94ce3ab2f
equal deleted inserted replaced
58876:1a8d65e71a66 58877:aec7bf35d6f5
   165     }
   165     }
   166 
   166 
   167     @Override
   167     @Override
   168     public Stamp constant(Constant c, MetaAccessProvider meta) {
   168     public Stamp constant(Constant c, MetaAccessProvider meta) {
   169         if (c instanceof PrimitiveConstant) {
   169         if (c instanceof PrimitiveConstant) {
   170             long value = ((PrimitiveConstant) c).asLong();
   170             PrimitiveConstant primitiveConstant = (PrimitiveConstant) c;
   171             return StampFactory.forInteger(getBits(), value, value);
   171             long value = primitiveConstant.asLong();
       
   172             if (primitiveConstant.getJavaKind() == JavaKind.Boolean && value == 1) {
       
   173                 // Need to special case booleans as integer stamps are always signed values.
       
   174                 value = -1;
       
   175             }
       
   176             Stamp returnedStamp = StampFactory.forInteger(getBits(), value, value);
       
   177             assert returnedStamp.hasValues();
       
   178             return returnedStamp;
   172         }
   179         }
   173         return this;
   180         return this;
   174     }
   181     }
   175 
   182 
   176     @Override
   183     @Override
  1603                             long defaultMask = CodeUtil.mask(resultBits);
  1610                             long defaultMask = CodeUtil.mask(resultBits);
  1604                             long newDownMask = stamp.downMask() & defaultMask;
  1611                             long newDownMask = stamp.downMask() & defaultMask;
  1605                             long newUpMask = stamp.upMask() & defaultMask;
  1612                             long newUpMask = stamp.upMask() & defaultMask;
  1606                             long newLowerBound = CodeUtil.signExtend((lowerBound | newDownMask) & newUpMask, resultBits);
  1613                             long newLowerBound = CodeUtil.signExtend((lowerBound | newDownMask) & newUpMask, resultBits);
  1607                             long newUpperBound = CodeUtil.signExtend((upperBound | newDownMask) & newUpMask, resultBits);
  1614                             long newUpperBound = CodeUtil.signExtend((upperBound | newDownMask) & newUpMask, resultBits);
  1608                             return new IntegerStamp(resultBits, newLowerBound, newUpperBound, newDownMask, newUpMask);
  1615 
       
  1616                             IntegerStamp result = new IntegerStamp(resultBits, newLowerBound, newUpperBound, newDownMask, newUpMask);
       
  1617                             assert result.hasValues();
       
  1618                             return result;
  1609                         }
  1619                         }
  1610                     },
  1620                     },
  1611 
  1621 
  1612                     new FloatConvertOp(I2F) {
  1622                     new FloatConvertOp(I2F) {
  1613 
  1623