changeset 18693:8d7ecba12c5d

Check for compatible stamps in read elimination.
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 16 Dec 2014 14:04:51 +0100
parents d6c33eb93b9f
children ec1b0b097d82
files graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java
diffstat 1 files changed, 3 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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;