# HG changeset patch # User Lukas Stadler # Date 1377524891 -7200 # Node ID bcb4ce5bd27e40b0b0d5c0b0ac3a0d2ec10dea03 # Parent c355f6b32fa6a149a3bcd3bea8591adfa4a4791a don't create multiple value proxies in PEAReadEliminationClosure diff -r c355f6b32fa6 -r bcb4ce5bd27e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java Mon Aug 26 11:15:26 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java Mon Aug 26 15:48:11 2013 +0200 @@ -77,6 +77,7 @@ public boolean verify() { assert value != null; assert proxyPoint != null; + assert !(value instanceof ProxyNode) || ((ProxyNode) value).proxyPoint != proxyPoint; return super.verify(); } diff -r c355f6b32fa6 -r bcb4ce5bd27e graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java Mon Aug 26 11:15:26 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java Mon Aug 26 15:48:11 2013 +0200 @@ -112,9 +112,12 @@ for (Map.Entry entry : exitState.getReadCache().entrySet()) { if (initialState.getReadCache().get(entry.getKey()) != entry.getValue()) { - ProxyNode proxy = new ProxyNode(exitState.getReadCache(entry.getKey().object, entry.getKey().identity), exitNode, PhiType.Value, null); - effects.addFloatingNode(proxy, "readCacheProxy"); - entry.setValue(proxy); + ValueNode value = exitState.getReadCache(entry.getKey().object, entry.getKey().identity); + if (!(value instanceof ProxyNode) || ((ProxyNode) value).proxyPoint() != exitNode) { + ProxyNode proxy = new ProxyNode(value, exitNode, PhiType.Value, null); + effects.addFloatingNode(proxy, "readCacheProxy"); + entry.setValue(proxy); + } } } }