Mercurial > hg > graal-compiler
changeset 7011:09df32b1dff9
make InstanceOfNode Virtualizable
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 23 Nov 2012 13:38:53 +0100 |
parents | 1d5f1237902f |
children | 9b7de658a76a |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java |
diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Tue Nov 20 16:38:09 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Nov 23 13:38:53 2012 +0100 @@ -28,11 +28,12 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; +import com.oracle.graal.nodes.virtual.*; /** * The {@code InstanceOfNode} represents an instanceof test. */ -public final class InstanceOfNode extends BooleanNode implements Canonicalizable, Lowerable, LIRLowerable { +public final class InstanceOfNode extends BooleanNode implements Canonicalizable, Lowerable, LIRLowerable, Virtualizable { @Input private ValueNode object; private final ResolvedJavaType type; @@ -129,4 +130,12 @@ } return super.verify(); } + + @Override + public void virtualize(VirtualizerTool tool) { + VirtualObjectNode virtual = tool.getVirtualState(object()); + if (virtual != null) { + tool.replaceWithValue(ConstantNode.forBoolean(virtual.type().isSubtypeOf(type()), graph())); + } + } }