Mercurial > hg > graal-compiler
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; }