changeset 18433:a0cd3a1e7d7d

FrameMapFactory: create (empty) FrameMap eagerly.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 10 Nov 2014 18:40:52 +0100
parents 6b58802e45b2
children 06624c98ed8b
files graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMapBuilder.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/DelayedFrameMapBuilder.java
diffstat 2 files changed, 11 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMapBuilder.java	Mon Nov 10 18:37:28 2014 +0100
+++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMapBuilder.java	Mon Nov 10 18:40:52 2014 +0100
@@ -58,12 +58,12 @@
     }
 
     @Override
-    protected void mapStackSlots(FrameMap frameMap, HashMap<VirtualStackSlot, StackSlot> mapping) {
+    protected void mapStackSlots(HashMap<VirtualStackSlot, StackSlot> mapping) {
         if (rbpSpillSlot != null) {
-            StackSlot reservedSlot = rbpSpillSlot.transform(frameMap);
+            StackSlot reservedSlot = rbpSpillSlot.transform();
             assert asStackSlot(reservedSlot).getRawOffset() == -16 : asStackSlot(reservedSlot).getRawOffset();
             mapping.put(rbpSpillSlot, reservedSlot);
         }
-        super.mapStackSlots(frameMap, mapping);
+        super.mapStackSlots(mapping);
     }
 }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/DelayedFrameMapBuilder.java	Mon Nov 10 18:37:28 2014 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/DelayedFrameMapBuilder.java	Mon Nov 10 18:40:52 2014 +0100
@@ -42,14 +42,14 @@
 
     private final RegisterConfig registerConfig;
     private final CodeCacheProvider codeCache;
-    private final FrameMapFactory factory;
+    protected final FrameMap frameMap;
     private final List<TrackedVirtualStackSlot> stackSlots;
     private final List<CallingConvention> calls;
 
     public DelayedFrameMapBuilder(FrameMapFactory factory, CodeCacheProvider codeCache, RegisterConfig registerConfig) {
         this.registerConfig = registerConfig == null ? codeCache.getRegisterConfig() : registerConfig;
         this.codeCache = codeCache;
-        this.factory = factory;
+        this.frameMap = factory.newFrameMap(registerConfig);
         this.stackSlots = new ArrayList<>();
         this.calls = new ArrayList<>();
         this.mappables = new ArrayList<>();
@@ -86,7 +86,7 @@
             super(lirKind);
         }
 
-        public abstract StackSlot transform(FrameMap frameMap);
+        public abstract StackSlot transform();
     }
 
     private class SimpleVirtualStackSlot extends TrackedVirtualStackSlot {
@@ -98,7 +98,7 @@
         }
 
         @Override
-        public StackSlot transform(FrameMap frameMap) {
+        public StackSlot transform() {
             int size = frameMap.spillSlotSize(getLIRKind());
             frameMap.spillSize = NumUtil.roundUp(frameMap.spillSize + size, size);
             return frameMap.allocateNewSpillSlot(getLIRKind(), 0);
@@ -119,7 +119,7 @@
         }
 
         @Override
-        public StackSlot transform(FrameMap frameMap) {
+        public StackSlot transform() {
             frameMap.spillSize += (slots * frameMap.getTarget().wordSize);
 
             if (!objects.isEmpty()) {
@@ -181,10 +181,9 @@
     }
 
     public FrameMap buildFrameMap(LIRGenerationResult res) {
-        FrameMap frameMap = factory.newFrameMap(registerConfig);
         HashMap<VirtualStackSlot, StackSlot> mapping = new HashMap<>();
         // fill
-        mapStackSlots(frameMap, mapping);
+        mapStackSlots(mapping);
         for (CallingConvention cc : calls) {
             frameMap.callsMethod(cc);
         }
@@ -209,9 +208,9 @@
         return frameMap;
     }
 
-    protected void mapStackSlots(FrameMap frameMap, HashMap<VirtualStackSlot, StackSlot> mapping) {
+    protected void mapStackSlots(HashMap<VirtualStackSlot, StackSlot> mapping) {
         for (TrackedVirtualStackSlot virtualSlot : stackSlots) {
-            StackSlot slot = virtualSlot.transform(frameMap);
+            StackSlot slot = virtualSlot.transform();
             mapping.put(virtualSlot, slot);
         }
     }