# HG changeset patch # User Gilles Duboscq # Date 1427978264 -7200 # Node ID 9dc78dc645e52b78f2393ec3ac16cba2d41af134 # Parent c5ae0424f822ac7d2914b421d08533eee25b7064 Integer exact arithmetic: make sure non-exact stamp logic is not used diff -r c5ae0424f822 -r 9dc78dc645e5 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactNode.java Tue Apr 07 11:30:29 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactNode.java Thu Apr 02 14:37:44 2015 +0200 @@ -41,13 +41,14 @@ public IntegerAddExactNode(ValueNode x, ValueNode y) { super(TYPE, x, y); + setStamp(x.stamp().unrestricted()); assert x.stamp().isCompatible(y.stamp()) && x.stamp() instanceof IntegerStamp; } @Override public boolean inferStamp() { // TODO Should probably use a specialized version which understands that it can't overflow - return super.inferStamp(); + return false; } @Override diff -r c5ae0424f822 -r 9dc78dc645e5 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactNode.java Tue Apr 07 11:30:29 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactNode.java Thu Apr 02 14:37:44 2015 +0200 @@ -41,10 +41,16 @@ public IntegerMulExactNode(ValueNode x, ValueNode y) { super(TYPE, x, y); + setStamp(x.stamp().unrestricted()); assert x.stamp().isCompatible(y.stamp()) && x.stamp() instanceof IntegerStamp; } @Override + public boolean inferStamp() { + return false; + } + + @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) { if (forX.isConstant() && !forY.isConstant()) { return new IntegerMulExactNode(forY, forX); diff -r c5ae0424f822 -r 9dc78dc645e5 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactNode.java Tue Apr 07 11:30:29 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactNode.java Thu Apr 02 14:37:44 2015 +0200 @@ -42,13 +42,14 @@ public IntegerSubExactNode(ValueNode x, ValueNode y) { super(TYPE, x, y); + setStamp(x.stamp().unrestricted()); assert x.stamp().isCompatible(y.stamp()) && x.stamp() instanceof IntegerStamp; } @Override public boolean inferStamp() { // TODO Should probably use a specialized version which understands that it can't overflow - return super.inferStamp(); + return false; } @Override