changeset 22341:f24100915864

LocationMarkerPhase: outsource RegStackValueSet.
author Josef Eisl <josef.eisl@jku.at>
date Fri, 24 Jul 2015 10:47:42 +0200
parents e830b9559d8f
children 85278a174428
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarkerPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java
diffstat 2 files changed, 134 insertions(+), 101 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarkerPhase.java	Fri Jul 24 11:54:38 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarkerPhase.java	Fri Jul 24 10:47:42 2015 +0200
@@ -49,105 +49,7 @@
         new Marker<B>(lirGenRes.getLIR(), lirGenRes.getFrameMap()).build();
     }
 
-    private static final class Marker<T extends AbstractBlockBase<T>> extends LocationMarker<T, Marker<T>.RegStackValueSet> {
-
-        private final class RegStackValueSet extends LiveValueSet<Marker<T>.RegStackValueSet> {
-
-            private final ValueSet registers;
-            private final ValueSet stack;
-            private Set<Value> extraStack;
-
-            public RegStackValueSet() {
-                registers = new ValueSet();
-                stack = new ValueSet();
-            }
-
-            private RegStackValueSet(RegStackValueSet s) {
-                registers = new ValueSet(s.registers);
-                stack = new ValueSet(s.stack);
-                if (s.extraStack != null) {
-                    extraStack = new HashSet<>(s.extraStack);
-                }
-            }
-
-            @Override
-            public Marker<T>.RegStackValueSet copy() {
-                return new RegStackValueSet(this);
-            }
-
-            @Override
-            public void put(Value v) {
-                if (isRegister(v)) {
-                    int index = asRegister(v).getReferenceMapIndex();
-                    registers.put(index, v);
-                } else if (isStackSlot(v)) {
-                    int index = frameMap.offsetForStackSlot(asStackSlot(v));
-                    assert index >= 0;
-                    if (index % 4 == 0) {
-                        stack.put(index / 4, v);
-                    } else {
-                        if (extraStack == null) {
-                            extraStack = new HashSet<>();
-                        }
-                        extraStack.add(v);
-                    }
-                }
-            }
-
-            @Override
-            public void putAll(RegStackValueSet v) {
-                registers.putAll(v.registers);
-                stack.putAll(v.stack);
-                if (v.extraStack != null) {
-                    if (extraStack == null) {
-                        extraStack = new HashSet<>();
-                    }
-                    extraStack.addAll(v.extraStack);
-                }
-            }
-
-            @Override
-            public void remove(Value v) {
-                if (isRegister(v)) {
-                    int index = asRegister(v).getReferenceMapIndex();
-                    registers.put(index, null);
-                } else if (isStackSlot(v)) {
-                    int index = frameMap.offsetForStackSlot(asStackSlot(v));
-                    assert index >= 0;
-                    if (index % 4 == 0) {
-                        stack.put(index / 4, null);
-                    } else if (extraStack != null) {
-                        extraStack.remove(v);
-                    }
-                }
-            }
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public boolean equals(Object obj) {
-                if (obj instanceof Marker.RegStackValueSet) {
-                    RegStackValueSet other = (RegStackValueSet) obj;
-                    return registers.equals(other.registers) && stack.equals(other.stack) && Objects.equals(extraStack, other.extraStack);
-                } else {
-                    return false;
-                }
-            }
-
-            @Override
-            public int hashCode() {
-                throw new UnsupportedOperationException();
-            }
-
-            public void addLiveValues(ReferenceMapBuilder refMap) {
-                registers.addLiveValues(refMap);
-                stack.addLiveValues(refMap);
-                if (extraStack != null) {
-                    for (Value v : extraStack) {
-                        refMap.addLiveValue(v);
-                    }
-                }
-            }
-        }
+    static final class Marker<T extends AbstractBlockBase<T>> extends LocationMarker<T, RegStackValueSet> {
 
         private final RegisterAttributes[] registerAttributes;
 
@@ -157,8 +59,8 @@
         }
 
         @Override
-        protected Marker<T>.RegStackValueSet newLiveValueSet() {
-            return new RegStackValueSet();
+        protected RegStackValueSet newLiveValueSet() {
+            return new RegStackValueSet(frameMap);
         }
 
         @Override
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java	Fri Jul 24 10:47:42 2015 +0200
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2015, 2015, 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.lir.dfa;
+
+import static jdk.internal.jvmci.code.ValueUtil.*;
+
+import java.util.*;
+
+import jdk.internal.jvmci.meta.*;
+
+import com.oracle.graal.lir.framemap.*;
+
+final class RegStackValueSet extends LiveValueSet<RegStackValueSet> {
+
+    private final FrameMap frameMap;
+    private final ValueSet registers;
+    private final ValueSet stack;
+    private Set<Value> extraStack;
+
+    public RegStackValueSet(FrameMap frameMap) {
+        this.frameMap = frameMap;
+        registers = new ValueSet();
+        stack = new ValueSet();
+    }
+
+    private RegStackValueSet(FrameMap frameMap, RegStackValueSet s) {
+        this.frameMap = frameMap;
+        registers = new ValueSet(s.registers);
+        stack = new ValueSet(s.stack);
+        if (s.extraStack != null) {
+            extraStack = new HashSet<>(s.extraStack);
+        }
+    }
+
+    @Override
+    public RegStackValueSet copy() {
+        return new RegStackValueSet(frameMap, this);
+    }
+
+    @Override
+    public void put(Value v) {
+        if (isRegister(v)) {
+            int index = asRegister(v).getReferenceMapIndex();
+            registers.put(index, v);
+        } else if (isStackSlot(v)) {
+            int index = frameMap.offsetForStackSlot(asStackSlot(v));
+            assert index >= 0;
+            if (index % 4 == 0) {
+                stack.put(index / 4, v);
+            } else {
+                if (extraStack == null) {
+                    extraStack = new HashSet<>();
+                }
+                extraStack.add(v);
+            }
+        }
+    }
+
+    @Override
+    public void putAll(RegStackValueSet v) {
+        registers.putAll(v.registers);
+        stack.putAll(v.stack);
+        if (v.extraStack != null) {
+            if (extraStack == null) {
+                extraStack = new HashSet<>();
+            }
+            extraStack.addAll(v.extraStack);
+        }
+    }
+
+    @Override
+    public void remove(Value v) {
+        if (isRegister(v)) {
+            int index = asRegister(v).getReferenceMapIndex();
+            registers.put(index, null);
+        } else if (isStackSlot(v)) {
+            int index = frameMap.offsetForStackSlot(asStackSlot(v));
+            assert index >= 0;
+            if (index % 4 == 0) {
+                stack.put(index / 4, null);
+            } else if (extraStack != null) {
+                extraStack.remove(v);
+            }
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof RegStackValueSet) {
+            RegStackValueSet other = (RegStackValueSet) obj;
+            return registers.equals(other.registers) && stack.equals(other.stack) && Objects.equals(extraStack, other.extraStack);
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void addLiveValues(ReferenceMapBuilder refMap) {
+        registers.addLiveValues(refMap);
+        stack.addLiveValues(refMap);
+        if (extraStack != null) {
+            for (Value v : extraStack) {
+                refMap.addLiveValue(v);
+            }
+        }
+    }
+}