changeset 17046:c72182ae4476

Remove redundant Begin nodes before LoopExit.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 04 Sep 2014 13:44:45 +0200
parents 7c12f8aae0c9
children e8c37988a819
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Thu Sep 04 13:33:04 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Thu Sep 04 13:44:45 2014 +0200
@@ -46,6 +46,11 @@
 
     @Override
     public void simplify(SimplifierTool tool) {
-        //
+        Node prev = this.predecessor();
+        while (prev.getNodeClass().is(BeginNode.class) && prev.usages().isEmpty()) {
+            BeginNode begin = (BeginNode) prev;
+            prev = prev.predecessor();
+            graph().removeFixed(begin);
+        }
     }
 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java	Thu Sep 04 13:33:04 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java	Thu Sep 04 13:44:45 2014 +0200
@@ -147,11 +147,11 @@
                     }
                 }
             }
-            survivingSuccessor.simplify(simplifierTool);
             Debug.log("Converting deopt on %-5s branch of %s to guard for remaining branch %s.", deoptBegin == ifNode.trueSuccessor() ? "true" : "false", ifNode, otherBegin);
             FixedNode next = pred.next();
             pred.setNext(guard);
             guard.setNext(next);
+            survivingSuccessor.simplify(simplifierTool);
             return;
         }