changeset 10081:20fd8760cb34

pull ScheduledNodeIterator into separate class
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 18 Jun 2013 16:38:18 +0200
parents e04f128d719c
children 665e95c28965
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ScheduledNodeIterator.java
diffstat 2 files changed, 81 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Tue Jun 18 12:46:06 2013 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Tue Jun 18 16:38:18 2013 +0200
@@ -34,55 +34,12 @@
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.util.*;
 import com.oracle.graal.phases.*;
+import com.oracle.graal.phases.graph.*;
 import com.oracle.graal.phases.schedule.*;
 import com.oracle.graal.phases.tiers.*;
 
 public class GuardLoweringPhase extends BasePhase<MidTierContext> {
 
-    private abstract static class ScheduledNodeIterator {
-
-        private FixedWithNextNode lastFixed;
-        private FixedWithNextNode reconnect;
-        private ListIterator<ScheduledNode> iterator;
-
-        public void processNodes(List<ScheduledNode> nodes, FixedWithNextNode begin) {
-            assert begin != null;
-            lastFixed = begin;
-            reconnect = null;
-            iterator = nodes.listIterator();
-            while (iterator.hasNext()) {
-                Node node = iterator.next();
-                if (!node.isAlive()) {
-                    continue;
-                }
-                if (reconnect != null && node instanceof FixedNode) {
-                    reconnect.setNext((FixedNode) node);
-                    reconnect = null;
-                }
-                if (node instanceof FixedWithNextNode) {
-                    lastFixed = (FixedWithNextNode) node;
-                }
-                processNode(node);
-            }
-        }
-
-        protected void insert(FixedNode start, FixedWithNextNode end) {
-            this.lastFixed.setNext(start);
-            this.lastFixed = end;
-            this.reconnect = end;
-        }
-
-        protected void replaceCurrent(FixedWithNextNode newNode) {
-            Node current = iterator.previous();
-            iterator.next(); // needed because of the previous() call
-            current.replaceAndDelete(newNode);
-            insert(newNode, newNode);
-            iterator.set(newNode);
-        }
-
-        protected abstract void processNode(Node node);
-    }
-
     private static class UseImplicitNullChecks extends ScheduledNodeIterator {
 
         private final IdentityHashMap<ValueNode, GuardNode> nullGuarded = new IdentityHashMap<>();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ScheduledNodeIterator.java	Tue Jun 18 16:38:18 2013 +0200
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.phases.graph;
+
+import java.util.*;
+
+import com.oracle.graal.graph.*;
+import com.oracle.graal.nodes.*;
+import com.oracle.graal.phases.schedule.*;
+
+/**
+ * Iterates over a list of nodes, which usually comes from
+ * {@link SchedulePhase#getBlockToNodesMap()}.
+ * 
+ * While iterating, it is possible to {@link #insert(FixedNode, FixedWithNextNode) insert} and
+ * {@link #replaceCurrent(FixedWithNextNode) replace} nodes.
+ */
+public abstract class ScheduledNodeIterator {
+
+    private FixedWithNextNode lastFixed;
+    private FixedWithNextNode reconnect;
+    private ListIterator<ScheduledNode> iterator;
+
+    public void processNodes(List<ScheduledNode> nodes, FixedWithNextNode begin) {
+        assert begin != null;
+        lastFixed = begin;
+        reconnect = null;
+        iterator = nodes.listIterator();
+        while (iterator.hasNext()) {
+            Node node = iterator.next();
+            if (!node.isAlive()) {
+                continue;
+            }
+            if (reconnect != null && node instanceof FixedNode) {
+                reconnect.setNext((FixedNode) node);
+                reconnect = null;
+            }
+            if (node instanceof FixedWithNextNode) {
+                lastFixed = (FixedWithNextNode) node;
+            }
+            processNode(node);
+        }
+    }
+
+    protected void insert(FixedNode start, FixedWithNextNode end) {
+        this.lastFixed.setNext(start);
+        this.lastFixed = end;
+        this.reconnect = end;
+    }
+
+    protected void replaceCurrent(FixedWithNextNode newNode) {
+        Node current = iterator.previous();
+        iterator.next(); // needed because of the previous() call
+        current.replaceAndDelete(newNode);
+        insert(newNode, newNode);
+        iterator.set(newNode);
+    }
+
+    protected abstract void processNode(Node node);
+}