# HG changeset patch # User Lukas Stadler # Date 1389947786 -3600 # Node ID 04615309d0186db54d10ad6de582d66c5f39ed51 # Parent 1e28a62e60319102eb2ecab5b0820e288d49208a fix Class.isInstance substitution diff -r 1e28a62e6031 -r 04615309d018 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java --- 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) diff -r 1e28a62e6031 -r 04615309d018 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java --- 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; diff -r 1e28a62e6031 -r 04615309d018 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java --- 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; }