# HG changeset patch # User Gilles Duboscq # Date 1430128551 -7200 # Node ID c92676a390b891765f449293f3291de79d229233 # Parent 294ed4ce1fa0b682299e7a4222c44a0dd0b2d15b ReadElimination: only anchor guard if it is different from cachedValue's guard diff -r 294ed4ce1fa0 -r c92676a390b8 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java Fri Apr 24 17:27:32 2015 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java Mon Apr 27 11:55:51 2015 +0200 @@ -89,8 +89,11 @@ ReadCacheEntry identifier = new ReadCacheEntry(object, read.location()); ValueNode cachedValue = state.getCacheEntry(identifier); if (cachedValue != null && read.stamp().isCompatible(cachedValue.stamp())) { + // Anchor guard if it is not fixed and different from cachedValue's guard if (read.getGuard() != null && !(read.getGuard() instanceof FixedNode)) { - effects.addFixedNodeBefore(new ValueAnchorNode((ValueNode) read.getGuard()), read); + if (!(cachedValue instanceof GuardedNode) || ((GuardedNode) cachedValue).getGuard() != read.getGuard()) { + effects.addFixedNodeBefore(new ValueAnchorNode((ValueNode) read.getGuard()), read); + } } effects.replaceAtUsages(read, cachedValue); addScalarAlias(read, cachedValue);