changeset 14008:1658d30cd273

Fix type error in compare convert-constant optimization.
author Roland Schatz <roland.schatz@oracle.com>
date Mon, 24 Feb 2014 11:15:27 +0100
parents 22804fafdb9f
children 384d7fc0e27b
files graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConvertCompare.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java
diffstat 3 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);
+    }
 }
--- 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
--- 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;