changeset 22427:f6a2cf072e8b

Don't introduce profiled checkcast if original checkcast would fold away
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Mon, 10 Aug 2015 16:22:59 -0700
parents b20e743478d3
children b8d59cd8a71b
files graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java
diffstat 2 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java	Mon Aug 10 16:22:43 2015 -0700
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java	Mon Aug 10 16:22:59 2015 -0700
@@ -2969,7 +2969,10 @@
 
         ValueNode checkCastNode = null;
         if (profile != null) {
-            if (profile.getNullSeen().isFalse()) {
+            if (CheckCastNode.findSynonym(resolvedType, object) == object) {
+                // Don't insert a profiled type check if the checkcast would simply go away
+                checkCastNode = object;
+            } else if (profile.getNullSeen().isFalse()) {
                 object = appendNullCheck(object);
                 ResolvedJavaType singleType = profile.asSingleType();
                 if (singleType != null) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Mon Aug 10 16:22:43 2015 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Mon Aug 10 16:22:59 2015 -0700
@@ -193,7 +193,7 @@
         return this;
     }
 
-    protected static ValueNode findSynonym(ResolvedJavaType type, ValueNode object) {
+    public static ValueNode findSynonym(ResolvedJavaType type, ValueNode object) {
         ResolvedJavaType objectType = StampTool.typeOrNull(object);
         if (objectType != null && type.isAssignableFrom(objectType)) {
             // we don't have to check for null types here because they will also pass the