changeset 11304:74ccfb4d39ec

Bailout of iterative conditional elimination phase in case the number of iterations exceeds specific threshold.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 14 Aug 2013 14:24:05 +0200
parents 28da427847c5
children edf7e09ad382
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java	Wed Aug 14 11:52:15 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java	Wed Aug 14 14:24:05 2013 +0200
@@ -26,6 +26,7 @@
 
 import java.util.*;
 
+import com.oracle.graal.api.code.*;
 import com.oracle.graal.graph.Graph.NodeChangedListener;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
@@ -34,11 +35,14 @@
 
 public class IterativeConditionalEliminationPhase extends BasePhase<PhaseContext> {
 
+    private static final int MAX_ITERATIONS = 256;
+
     @Override
     protected void run(StructuredGraph graph, PhaseContext context) {
         Set<Node> canonicalizationRoots = new HashSet<>();
         ConditionalEliminationPhase eliminate = new ConditionalEliminationPhase(context.getRuntime());
         Listener listener = new Listener(canonicalizationRoots);
+        int count = 0;
         while (true) {
             graph.trackInputChange(listener);
             eliminate.apply(graph);
@@ -48,6 +52,9 @@
             }
             new CanonicalizerPhase.Instance(context.getRuntime(), context.getAssumptions(), !AOTCompilation.getValue(), canonicalizationRoots, null).apply(graph);
             canonicalizationRoots.clear();
+            if (++count > MAX_ITERATIONS) {
+                throw new BailoutException("Number of iterations in conditional elimination phase exceeds " + MAX_ITERATIONS);
+            }
         }
     }