Mercurial > hg > graal-compiler
changeset 20183:9dc78dc645e5
Integer exact arithmetic: make sure non-exact stamp logic is not used
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Thu, 02 Apr 2015 14:37:44 +0200 |
parents | c5ae0424f822 |
children | 84105dcdb05b |
files | graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactNode.java |
diffstat | 3 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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);
--- 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