Mercurial > hg > truffle
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java @ 18360:6a5dc0bbebe7
Introduce PointerEqualsNode for metaspace pointer comparison.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Wed, 12 Nov 2014 11:48:54 +0100 |
parents | 8652481a1110 |
children | 0f4813e0b4a9 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Tue Nov 11 18:34:21 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Wed Nov 12 11:48:54 2014 +0100 @@ -25,6 +25,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -93,7 +94,7 @@ @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) { if (forX.isConstant() && forY.isConstant()) { - return LogicConstantNode.forBoolean(condition().foldCondition(forX.asJavaConstant(), forY.asJavaConstant(), tool.getConstantReflection(), unorderedIsTrue())); + return LogicConstantNode.forBoolean(condition().foldCondition(forX.asConstant(), forY.asConstant(), tool.getConstantReflection(), unorderedIsTrue())); } ValueNode result; if (forX.isConstant()) { @@ -156,8 +157,10 @@ CompareNode comparison; if (condition == Condition.EQ) { - if (x.getKind() == Kind.Object) { + if (x.stamp() instanceof AbstractObjectStamp) { comparison = ObjectEqualsNode.create(x, y); + } else if (x.stamp() instanceof AbstractPointerStamp) { + comparison = PointerEqualsNode.create(x, y); } else { assert x.getKind().isNumericInteger(); comparison = IntegerEqualsNode.create(x, y);