# HG changeset patch # User Doug Simon # Date 1427970132 -7200 # Node ID 1efae42be4f4df941896a43207623b913d2daa0c # Parent 987b4c42aef9f1cafd5f9230d01706378c15d235 canonicalize 'o.getClass() == A.class' to a TypeCheckNode diff -r 987b4c42aef9 -r 1efae42be4f4 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java --- 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()) { diff -r 987b4c42aef9 -r 1efae42be4f4 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java --- 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;