changeset 11706:cfca65c7cf02

Do not propagate state over loop exits in conditional elimination phase as the phase does not insert proxy nodes.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 18 Sep 2013 23:06:34 +0200
parents 6e8df0ca2879
children f6f5fceef2ce
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Wed Sep 18 12:55:52 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Wed Sep 18 23:06:34 2013 +0200
@@ -258,6 +258,14 @@
                 metricTypeRegistered.increment();
             }
         }
+
+        public void clear() {
+            knownTypes.clear();
+            knownNonNull.clear();
+            knownNull.clear();
+            trueConditions.clear();
+            falseConditions.clear();
+        }
     }
 
     public static ResolvedJavaType widen(ResolvedJavaType a, ResolvedJavaType b) {
@@ -355,6 +363,9 @@
 
         private void registerControlSplitInfo(Node pred, AbstractBeginNode begin) {
             assert pred != null && begin != null;
+            if (begin instanceof LoopExitNode) {
+                state.clear();
+            }
 
             if (pred instanceof IfNode) {
                 IfNode ifNode = (IfNode) pred;