diff graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java @ 11836:d72c314260dc

Add a DynamicDeoptimizeNode where the action and reason is a input node.
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 26 Sep 2013 17:30:19 +0200
parents 3e4482a06170
children 51d5a22e0ea9
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java	Thu Sep 26 16:26:56 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java	Thu Sep 26 17:30:19 2013 +0200
@@ -29,7 +29,7 @@
 import com.oracle.graal.phases.*;
 
 /**
- * This phase tries to find {@link DeoptimizeNode DeoptimizeNodes} which use the same
+ * This phase tries to find {@link AbstractDeoptimizeNode DeoptimizeNodes} which use the same
  * {@link FrameState} and merges them together.
  */
 public class DeoptimizationGroupingPhase extends Phase {
@@ -39,8 +39,8 @@
         ControlFlowGraph cfg = null;
         for (FrameState fs : graph.getNodes(FrameState.class)) {
             FixedNode target = null;
-            List<DeoptimizeNode> obsoletes = null;
-            for (DeoptimizeNode deopt : fs.usages().filter(DeoptimizeNode.class)) {
+            List<AbstractDeoptimizeNode> obsoletes = null;
+            for (AbstractDeoptimizeNode deopt : fs.usages().filter(AbstractDeoptimizeNode.class)) {
                 if (target == null) {
                     target = deopt;
                 } else {
@@ -48,12 +48,12 @@
                         cfg = ControlFlowGraph.compute(graph, true, true, false, false);
                     }
                     MergeNode merge;
-                    if (target instanceof DeoptimizeNode) {
+                    if (target instanceof AbstractDeoptimizeNode) {
                         merge = graph.add(new MergeNode());
                         EndNode firstEnd = graph.add(new EndNode());
                         merge.addForwardEnd(firstEnd);
                         target.predecessor().replaceFirstSuccessor(target, firstEnd);
-                        exitLoops((DeoptimizeNode) target, firstEnd, cfg);
+                        exitLoops((AbstractDeoptimizeNode) target, firstEnd, cfg);
                         merge.setNext(target);
                         obsoletes = new LinkedList<>();
                         target = merge;
@@ -68,14 +68,14 @@
                 }
             }
             if (obsoletes != null) {
-                for (DeoptimizeNode obsolete : obsoletes) {
+                for (AbstractDeoptimizeNode obsolete : obsoletes) {
                     obsolete.safeDelete();
                 }
             }
         }
     }
 
-    private static void exitLoops(DeoptimizeNode deopt, EndNode end, ControlFlowGraph cfg) {
+    private static void exitLoops(AbstractDeoptimizeNode deopt, EndNode end, ControlFlowGraph cfg) {
         Block block = cfg.blockFor(deopt);
         Loop loop = block.getLoop();
         while (loop != null) {