changeset 5393:9b44497fef98

fix for IsTypeNode canonicalization
author Lukas Stadler <lukas.stadler@jku.at>
date Fri, 11 May 2012 16:38:22 +0200
parents 3f9895797ff4
children c976c744c802 af76b75d5928
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CheckCastEliminationPhase.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java
diffstat 3 files changed, 8 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CheckCastEliminationPhase.java	Fri May 11 16:02:24 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CheckCastEliminationPhase.java	Fri May 11 16:38:22 2012 +0200
@@ -22,7 +22,6 @@
  */
 package com.oracle.graal.compiler.phases;
 
-import java.io.*;
 import java.util.*;
 
 import com.oracle.graal.compiler.graph.*;
@@ -48,19 +47,9 @@
 
     private StructuredGraph graph;
 
-    static PrintStream out = System.out;
-
     @Override
     protected void run(StructuredGraph inputGraph) {
         graph = inputGraph;
-//        if (!graph.method().holder().name().contains("DiskIndex")) {
-//            return;
-//        }
-//        if (!graph.method().name().equals("writeCategoryTable")) {
-//            return;
-//        }
-//        out.println("checkcast " + graph.method());
-
         new EliminateCheckCasts(graph.start(), new State()).apply();
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Fri May 11 16:02:24 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Fri May 11 16:38:22 2012 +0200
@@ -79,8 +79,6 @@
         cancelled = true;
     }
 
-//    private static PrintStream out = System.out;
-
     public void run() {
         withinEnqueue.set(Boolean.FALSE);
         try {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java	Fri May 11 16:02:24 2012 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java	Fri May 11 16:38:22 2012 +0200
@@ -28,6 +28,7 @@
 import com.oracle.graal.nodes.type.*;
 import com.oracle.max.cri.ci.*;
 import com.oracle.max.cri.ri.*;
+import com.oracle.max.cri.ri.RiType.Representation;
 
 public final class IsTypeNode extends BooleanNode implements Canonicalizable, LIRLowerable {
 
@@ -62,6 +63,13 @@
 
     @Override
     public ValueNode canonical(CanonicalizerTool tool) {
+        if (objectClass().isConstant()) {
+            CiConstant constant = objectClass().asConstant();
+            CiConstant typeHub = type.getEncoding(Representation.ObjectHub);
+            assert constant.kind == typeHub.kind;
+            return ConstantNode.forBoolean(constant.equivalent(typeHub), graph());
+        }
+        // TODO(ls) since a ReadHubNode with an exactType should canonicalize itself to a constant this should actually never happen, maybe turn into an assertion?
         RiResolvedType exactType = objectClass() instanceof ReadHubNode ? ((ReadHubNode) objectClass()).object().exactType() : null;
         if (exactType != null) {
             return ConstantNode.forBoolean(exactType == type(), graph());