changeset 18447:f933c2d7521b

FrameBuilder: add FrameMappingToolImpl.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 17 Nov 2014 18:28:51 +0100
parents 163d1a082ccc
children 645aa30b23a7
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/DelayedFrameMapBuilder.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMappingToolImpl.java
diffstat 2 files changed, 57 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/DelayedFrameMapBuilder.java	Mon Nov 17 17:39:16 2014 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/DelayedFrameMapBuilder.java	Mon Nov 17 18:28:51 2014 +0100
@@ -163,26 +163,24 @@
     public FrameMap buildFrameMap(LIRGenerationResult res) {
         HashMap<VirtualStackSlot, StackSlot> mapping = new HashMap<>();
         // fill
-        mapStackSlots(mapping);
+        FrameMappingToolImpl tool = new FrameMappingToolImpl(mapping, this);
+        tool.mapStackSlots();
         for (CallingConvention cc : calls) {
             frameMap.callsMethod(cc);
         }
         // rewrite
-        mappables.forEach(m -> m.map(mapping::get));
+        mappables.forEach(m -> m.map(tool));
 
         frameMap.finish();
         return frameMap;
     }
 
-    protected void mapStackSlots(HashMap<VirtualStackSlot, StackSlot> mapping) {
-        for (TrackedVirtualStackSlot virtualSlot : stackSlots) {
-            StackSlot slot = virtualSlot.transform();
-            mapping.put(virtualSlot, slot);
-        }
-    }
-
     public void requireMapping(FrameMappable mappable) {
         this.mappables.add(mappable);
     }
 
+    List<TrackedVirtualStackSlot> getStackSlots() {
+        return stackSlots;
+    }
+
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMappingToolImpl.java	Mon Nov 17 18:28:51 2014 +0100
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2014, 2014, 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.framemap;
+
+import java.util.*;
+
+import com.oracle.graal.api.code.*;
+import com.oracle.graal.lir.framemap.DelayedFrameMapBuilder.TrackedVirtualStackSlot;
+
+public class FrameMappingToolImpl implements FrameMappingTool {
+
+    private final Map<VirtualStackSlot, StackSlot> mapping;
+    private final DelayedFrameMapBuilder builder;
+
+    public FrameMappingToolImpl(Map<VirtualStackSlot, StackSlot> mapping, DelayedFrameMapBuilder builder) {
+        this.mapping = mapping;
+        this.builder = builder;
+    }
+
+    public StackSlot getStackSlot(VirtualStackSlot slot) {
+        return mapping.get(slot);
+    }
+
+    public void mapStackSlots() {
+        for (TrackedVirtualStackSlot virtualSlot : builder.getStackSlots()) {
+            StackSlot slot = virtualSlot.transform();
+            mapping.put(virtualSlot, slot);
+        }
+    }
+}