Mercurial > hg > graal-compiler
changeset 21120:c92676a390b8
ReadElimination: only anchor guard if it is different from cachedValue's guard
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Mon, 27 Apr 2015 11:55:51 +0200 |
parents | 294ed4ce1fa0 |
children | b625b459cf45 019ae3824a4e |
files | graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java |
diffstat | 1 files changed, 4 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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);