changeset 5847:d6257bd5e7f2

Make ReadEliminationPhase Value proxy aware now that FLoatingRead keeps loop closed form
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 17 Jul 2012 23:57:18 +0200
parents da0eff406c2c
children 843af0a72913
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ReadEliminationPhase.java
diffstat 1 files changed, 6 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ReadEliminationPhase.java	Tue Jul 17 20:07:53 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ReadEliminationPhase.java	Tue Jul 17 23:57:18 2012 +0200
@@ -56,6 +56,9 @@
         if (visited.isMarked(lastLocationAccess)) {
             return true; // dataflow loops must come from Phis assume them ok until proven wrong
         }
+        if (lastLocationAccess instanceof ValueProxyNode) {
+            return isWrites(n, ((ValueProxyNode) lastLocationAccess).value(), visited);
+        }
         if (lastLocationAccess instanceof WriteNode) {
             WriteNode other = (WriteNode) lastLocationAccess;
             return other.object() == n.object() && other.location() == n.location();
@@ -77,6 +80,9 @@
         if (exisiting != null) {
             return exisiting;
         }
+        if (lastLocationAccess instanceof ValueProxyNode) {
+            return getValue(n, ((ValueProxyNode) lastLocationAccess).value(), nodeMap);
+        }
         if (lastLocationAccess instanceof WriteNode) {
             return ((WriteNode) lastLocationAccess).value();
         }