Mercurial > hg > graal-jvmci-8
changeset 9587:c84eb4661fe9
Merge
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Mon, 06 May 2013 18:25:51 +0200 |
parents | c064c48b9387 (diff) ff153f4ae48b (current diff) |
children | 65de4389f3ed |
files | src/cpu/x86/vm/graalStubAssembler_x86.cpp |
diffstat | 1 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Mon May 06 16:59:44 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Mon May 06 18:25:51 2013 +0200 @@ -77,9 +77,16 @@ boolean xVirtual = stateX != null && stateX.getState() == EscapeState.Virtual; boolean yVirtual = stateY != null && stateY.getState() == EscapeState.Virtual; - if (xVirtual ^ yVirtual) { - // one of them is virtual: they can never be the same objects - tool.replaceWithValue(LogicConstantNode.contradiction(graph())); + if (xVirtual && !yVirtual) { + if (stateX.getVirtualObject().hasIdentity()) { + // one of them is virtual: they can never be the same objects + tool.replaceWithValue(LogicConstantNode.contradiction(graph())); + } + } else if (!xVirtual && yVirtual) { + if (stateY.getVirtualObject().hasIdentity()) { + // one of them is virtual: they can never be the same objects + tool.replaceWithValue(LogicConstantNode.contradiction(graph())); + } } else if (xVirtual && yVirtual) { boolean xIdentity = stateX.getVirtualObject().hasIdentity(); boolean yIdentity = stateY.getVirtualObject().hasIdentity();