changeset 13689:04615309d018

fix Class.isInstance substitution
author Lukas Stadler <lukas.stadler@jku.at>
date Fri, 17 Jan 2014 09:36:26 +0100
parents 1e28a62e6031
children 08f58bfde0dd
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java
diffstat 3 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java	Wed Jan 15 17:00:40 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java	Fri Jan 17 09:36:26 2014 +0100
@@ -31,6 +31,7 @@
 import com.oracle.graal.api.replacements.*;
 import com.oracle.graal.hotspot.nodes.*;
 import com.oracle.graal.nodes.calc.*;
+import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.word.*;
 
@@ -118,8 +119,8 @@
 
     @MacroSubstitution(macro = ClassIsInstanceNode.class, isStatic = false)
     @MethodSubstitution(isStatic = false)
-    public static boolean isInstance(final Class<?> thisObj, Object obj) {
-        return !isPrimitive(thisObj) && ConditionalNode.materializeIsInstance(thisObj, obj);
+    public static boolean isInstance(Class<?> thisObj, Object obj) {
+        return ConditionalNode.materializeIsInstance(thisObj, obj);
     }
 
     @MacroSubstitution(macro = ClassCastNode.class, isStatic = false)
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java	Wed Jan 15 17:00:40 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java	Fri Jan 17 09:36:26 2014 +0100
@@ -187,7 +187,7 @@
         BeginNode anchorNode = BeginNode.anchor();
         Word hub = loadWordFromObject(mirror, klassOffset());
         Word objectHub = loadHubIntrinsic(object, getWordKind(), anchorNode);
-        if (!checkUnknownSubType(hub, objectHub)) {
+        if (hub.equal(0) || !checkUnknownSubType(hub, objectHub)) {
             return falseValue;
         }
         return trueValue;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java	Wed Jan 15 17:00:40 2014 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java	Fri Jan 17 09:36:26 2014 +0100
@@ -62,7 +62,11 @@
         if (mirror().isConstant()) {
             Class clazz = (Class) mirror().asConstant().asObject();
             ResolvedJavaType t = tool.getMetaAccess().lookupJavaType(clazz);
-            return graph().unique(new InstanceOfNode(t, object(), null));
+            if (t.isPrimitive()) {
+                return LogicConstantNode.contradiction(graph());
+            } else {
+                return graph().unique(new InstanceOfNode(t, object(), null));
+            }
         }
         return this;
     }