# HG changeset patch # User Gilles Duboscq # Date 1401367483 -7200 # Node ID 0ad889977080c970e08c729389feb01e63e8d500 # Parent 3a537502f40f3325b8430224b218fcf9bd8c4539 CompareNode.canonicalizeSymmetricConstant can lead to float<->int changes so the right type of node needs to be created depending on the inputs diff -r 3a537502f40f -r 0ad889977080 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java --- 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(); } } diff -r 3a537502f40f -r 0ad889977080 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java --- 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(); } } diff -r 3a537502f40f -r 0ad889977080 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java --- 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 diff -r 3a537502f40f -r 0ad889977080 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java --- 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 diff -r 3a537502f40f -r 0ad889977080 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java --- 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(); } }