# HG changeset patch # User Lukas Stadler # Date 1336747102 -7200 # Node ID 9b44497fef98c3cf1877fa210c515eb99da40614 # Parent 3f9895797ff41cbfb5a3adf28b5df9ca8712ab7d fix for IsTypeNode canonicalization diff -r 3f9895797ff4 -r 9b44497fef98 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CheckCastEliminationPhase.java --- 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(); } diff -r 3f9895797ff4 -r 9b44497fef98 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- 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 { diff -r 3f9895797ff4 -r 9b44497fef98 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java --- 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());