diff graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java @ 21678:7355942cb270

Improve lowering of the type check node.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 03 Jun 2015 01:10:18 +0200
parents 48c1ebd24120
children e7024ad04e07
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Tue Jun 02 23:20:46 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Wed Jun 03 01:10:18 2015 +0200
@@ -33,6 +33,7 @@
 import com.oracle.jvmci.meta.ResolvedJavaType;
 import com.oracle.jvmci.meta.ForeignCallDescriptor;
 import com.oracle.jvmci.meta.Kind;
+
 import static com.oracle.jvmci.meta.LocationIdentity.*;
 import static com.oracle.graal.compiler.common.GraalOptions.*;
 import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.*;
@@ -129,7 +130,7 @@
             }
         } else if (n instanceof TypeCheckNode) {
             if (graph.getGuardsStage().areDeoptsFixed()) {
-                instanceofSnippets.lower((TypeCheckNode) n, tool);
+                lowerTypeCheckNode((TypeCheckNode) n, tool, graph);
             }
         } else if (n instanceof InstanceOfDynamicNode) {
             if (graph.getGuardsStage().areDeoptsFixed()) {
@@ -211,6 +212,13 @@
         }
     }
 
+    private void lowerTypeCheckNode(TypeCheckNode n, LoweringTool tool, StructuredGraph graph) {
+        ValueNode hub = createReadHub(graph, n.getValue(), null);
+        ValueNode clazz = graph.unique(ConstantNode.forConstant(KlassPointerStamp.klass(), n.type().getObjectHub(), tool.getMetaAccess()));
+        LogicNode objectEquals = graph.unique(PointerEqualsNode.create(hub, clazz));
+        n.replaceAndDelete(objectEquals);
+    }
+
     private void lowerKlassLayoutHelperNode(KlassLayoutHelperNode n, LoweringTool tool) {
         if (tool.getLoweringStage() == LoweringTool.StandardLoweringStage.HIGH_TIER) {
             return;