Mercurial > hg > graal-compiler
changeset 20136:1efae42be4f4
canonicalize 'o.getClass() == A.class' to a TypeCheckNode
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 02 Apr 2015 12:22:12 +0200 |
parents | 987b4c42aef9 |
children | 393ccd88c317 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java |
diffstat | 2 files changed, 13 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Thu Apr 02 11:45:32 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Thu Apr 02 12:22:12 2015 +0200 @@ -27,8 +27,11 @@ import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "==") @@ -55,6 +58,15 @@ } } + @Override + protected ValueNode canonicalizeSymmetricConstant(CanonicalizerTool tool, Constant constant, ValueNode nonConstant, boolean mirrored) { + ResolvedJavaType type = tool.getConstantReflection().asJavaType(constant); + if (type != null && nonConstant instanceof GetClassNode) { + return new TypeCheckNode(type, ((GetClassNode) nonConstant).getObject()); + } + return super.canonicalizeSymmetricConstant(tool, constant, nonConstant, mirrored); + } + private void virtualizeNonVirtualComparison(State state, ValueNode other, VirtualizerTool tool) { if (!state.getVirtualObject().hasIdentity() && state.getVirtualObject().entryKind(0) == Kind.Boolean) { if (other.isConstant()) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java Thu Apr 02 11:45:32 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java Thu Apr 02 12:22:12 2015 +0200 @@ -41,7 +41,7 @@ protected final ResolvedJavaType type; - protected TypeCheckNode(ResolvedJavaType type, ValueNode object) { + public TypeCheckNode(ResolvedJavaType type, ValueNode object) { super(TYPE, object); this.type = type; assert type != null;