# HG changeset patch # User Roland Schatz # Date 1393236927 -3600 # Node ID 1658d30cd273bda2866dec0249e26780eaa23d21 # Parent 22804fafdb9f8cabced56ea71b11233757c0ffae Fix type error in compare convert-constant optimization. diff -r 22804fafdb9f -r 1658d30cd273 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConvertCompare.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConvertCompare.java Sat Feb 22 06:17:50 2014 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConvertCompare.java Mon Feb 24 11:15:27 2014 +0100 @@ -34,4 +34,13 @@ public void run0() throws Throwable { runTest("test", 0, 2.87f); } + + public static boolean testChar(int x) { + return ((char) x) == 42; + } + + @Test + public void run1() { + runTest("testChar", 42); + } } diff -r 22804fafdb9f -r 1658d30cd273 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Sat Feb 22 06:17:50 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Mon Feb 24 11:15:27 2014 +0100 @@ -160,6 +160,19 @@ } /** + * Returns a node for a primitive of a given type. + */ + public static ConstantNode forPrimitive(Stamp stamp, Constant constant, StructuredGraph graph) { + if (stamp instanceof IntegerStamp) { + assert constant.getKind().isNumericInteger() && stamp.getStackKind() == constant.getKind().getStackKind(); + return forIntegerStamp(stamp, constant.asLong(), graph); + } else { + assert constant.getKind().isNumericFloat() && stamp.getStackKind() == constant.getKind(); + return forPrimitive(constant, graph); + } + } + + /** * Returns a node for a double constant. * * @param d the double value for which to create the instruction diff -r 22804fafdb9f -r 1658d30cd273 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Sat Feb 22 06:17:50 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Mon Feb 24 11:15:27 2014 +0100 @@ -162,7 +162,7 @@ if (convert.isLossless()) { Constant reverseConverted = convert.reverse(constant); if (convert.convert(reverseConverted).equals(constant)) { - return ConstantNode.forPrimitive(reverseConverted, convert.graph()); + return ConstantNode.forPrimitive(convert.getInput().stamp(), reverseConverted, convert.graph()); } } return null;