# HG changeset patch # User Roland Schatz # Date 1418735091 -3600 # Node ID 8d7ecba12c5d5ce9ffb0e952501c3ad2362b62bb # Parent d6c33eb93b9feccc55f19df5fe64855f40a04d2a Check for compatible stamps in read elimination. diff -r d6c33eb93b9f -r 8d7ecba12c5d 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 Tue Dec 16 10:59:29 2014 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java Tue Dec 16 14:04:51 2014 +0100 @@ -62,7 +62,7 @@ LoadCacheEntry identifier = new LoadCacheEntry(object, access.field()); ValueNode cachedValue = state.getCacheEntry(identifier); if (node instanceof LoadFieldNode) { - if (cachedValue != null) { + if (cachedValue != null && access.stamp().isCompatible(cachedValue.stamp())) { effects.replaceAtUsages(access, cachedValue); addScalarAlias(access, cachedValue); deleted = true; @@ -87,7 +87,7 @@ ValueNode object = GraphUtil.unproxify(read.object()); ReadCacheEntry identifier = new ReadCacheEntry(object, read.location()); ValueNode cachedValue = state.getCacheEntry(identifier); - if (cachedValue != null) { + if (cachedValue != null && read.stamp().isCompatible(cachedValue.stamp())) { if (read.getGuard() != null && !(read.getGuard() instanceof FixedNode)) { effects.addFixedNodeBefore(ValueAnchorNode.create((ValueNode) read.getGuard()), read); } @@ -122,7 +122,7 @@ ValueNode object = GraphUtil.unproxify(load.object()); UnsafeLoadCacheEntry identifier = new UnsafeLoadCacheEntry(object, load.offset(), load.getLocationIdentity()); ValueNode cachedValue = state.getCacheEntry(identifier); - if (cachedValue != null) { + if (cachedValue != null && load.stamp().isCompatible(cachedValue.stamp())) { effects.replaceAtUsages(load, cachedValue); addScalarAlias(load, cachedValue); deleted = true;