Mercurial > hg > truffle
changeset 15975:0ad889977080
CompareNode.canonicalizeSymmetricConstant can lead to float<->int changes so the right type of node needs to be created depending on the inputs
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Thu, 29 May 2014 14:44:43 +0200 |
parents | 3a537502f40f |
children | 1dcc7ae72723 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java |
diffstat | 5 files changed, 30 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Thu May 29 16:12:12 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Thu May 29 14:44:43 2014 +0200 @@ -24,6 +24,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; @@ -71,6 +72,11 @@ @Override protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) { - return new FloatEqualsNode(newX, newY); + if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) { + return new FloatEqualsNode(newX, newY); + } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) { + return new IntegerEqualsNode(newX, newY); + } + throw GraalInternalError.shouldNotReachHere(); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Thu May 29 16:12:12 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Thu May 29 14:44:43 2014 +0200 @@ -24,6 +24,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.TriState; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; @@ -70,6 +71,11 @@ @Override protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) { - return new FloatLessThanNode(newX, newY, unorderedIsTrue); + if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) { + return new FloatLessThanNode(newX, newY, unorderedIsTrue); + } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) { + return new IntegerLessThanNode(newX, newY); + } + throw GraalInternalError.shouldNotReachHere(); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java Thu May 29 16:12:12 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java Thu May 29 14:44:43 2014 +0200 @@ -42,8 +42,8 @@ */ public IntegerBelowThanNode(ValueNode x, ValueNode y) { super(x, y); - assert !x.getKind().isNumericFloat() && x.getKind() != Kind.Object; - assert !y.getKind().isNumericFloat() && y.getKind() != Kind.Object; + assert x.stamp() instanceof IntegerStamp; + assert y.stamp() instanceof IntegerStamp; } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Thu May 29 16:12:12 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Thu May 29 14:44:43 2014 +0200 @@ -24,6 +24,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.TriState; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; @@ -73,7 +74,12 @@ @Override protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) { - return new IntegerEqualsNode(newX, newY); + if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) { + return new FloatEqualsNode(newX, newY); + } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) { + return new IntegerEqualsNode(newX, newY); + } + throw GraalInternalError.shouldNotReachHere(); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Thu May 29 16:12:12 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Thu May 29 14:44:43 2014 +0200 @@ -24,6 +24,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; @@ -104,6 +105,11 @@ @Override protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) { - return new IntegerLessThanNode(newX, newY); + if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) { + return new FloatLessThanNode(newX, newY, true); + } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) { + return new IntegerLessThanNode(newX, newY); + } + throw GraalInternalError.shouldNotReachHere(); } }