changeset 16402:639716622dc8

GuardLoweringPhase should not leave dead nodes behind
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 03 Jul 2014 18:27:08 +0200
parents 347915b8cea8
children 39f9f052e5a8
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Wed Jul 02 18:23:56 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Thu Jul 03 18:27:08 2014 +0200
@@ -98,8 +98,14 @@
                     access.setGuard(null);
                     FixedAccessNode fixedAccess;
                     if (access instanceof FloatingAccessNode) {
-                        fixedAccess = ((FloatingAccessNode) access).asFixedNode();
+                        FloatingAccessNode floatingAccessNode = (FloatingAccessNode) access;
+                        MemoryNode lastLocationAccess = floatingAccessNode.getLastLocationAccess();
+                        fixedAccess = floatingAccessNode.asFixedNode();
                         replaceCurrent(fixedAccess);
+                        if (lastLocationAccess != null) {
+                            // fixed accesses are not currently part of the memory graph
+                            GraphUtil.tryKillUnused(lastLocationAccess.asNode());
+                        }
                     } else {
                         fixedAccess = (FixedAccessNode) access;
                     }