changeset 18469:d68ab3959fec

Remove static id from VirtualStackSlot.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 20 Nov 2014 10:32:55 +0100
parents 6014e40b07f8
children eb2a8bb3c2c4
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualStackSlot.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderImpl.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/SimpleVirtualStackSlot.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/VirtualStackSlotRange.java
diffstat 4 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualStackSlot.java	Wed Nov 19 17:31:31 2014 +0100
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualStackSlot.java	Thu Nov 20 10:32:55 2014 +0100
@@ -27,12 +27,11 @@
 public abstract class VirtualStackSlot extends StackSlotValue {
 
     private static final long serialVersionUID = 2823688688873398219L;
-    private static int idCounter = 0;
     private final int id;
 
-    public VirtualStackSlot(LIRKind lirKind) {
+    public VirtualStackSlot(int id, LIRKind lirKind) {
         super(lirKind);
-        id = idCounter++;
+        this.id = id;
     }
 
     public int getId() {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderImpl.java	Wed Nov 19 17:31:31 2014 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderImpl.java	Thu Nov 20 10:32:55 2014 +0100
@@ -39,6 +39,7 @@
     protected final FrameMap frameMap;
     private final List<VirtualStackSlot> stackSlots;
     private final List<CallingConvention> calls;
+    private int numStackSlots;
 
     public FrameMapBuilderImpl(FrameMap frameMap, CodeCacheProvider codeCache, RegisterConfig registerConfig) {
         assert registerConfig != null : "No register config!";
@@ -48,12 +49,13 @@
         this.stackSlots = new ArrayList<>();
         this.calls = new ArrayList<>();
         this.mappables = new ArrayList<>();
+        this.numStackSlots = 0;
     }
 
     private final List<FrameMappable> mappables;
 
     public VirtualStackSlot allocateSpillSlot(LIRKind kind) {
-        SimpleVirtualStackSlot slot = new SimpleVirtualStackSlot(kind);
+        SimpleVirtualStackSlot slot = new SimpleVirtualStackSlot(numStackSlots++, kind);
         stackSlots.add(slot);
         return slot;
     }
@@ -65,7 +67,7 @@
         if (outObjectStackSlots != null) {
             throw GraalInternalError.unimplemented();
         }
-        VirtualStackSlotRange slot = new VirtualStackSlotRange(slots, objects);
+        VirtualStackSlotRange slot = new VirtualStackSlotRange(numStackSlots++, slots, objects);
         stackSlots.add(slot);
         return slot;
     }
@@ -78,6 +80,14 @@
         return codeCache;
     }
 
+    /**
+     * Returns the number of {@link VirtualStackSlot}s created by this {@link FrameMapBuilder}. Can
+     * be used as an upper bound for an array indexed by {@link VirtualStackSlot#getId()}.
+     */
+    public int getNumberOfStackSlots() {
+        return numStackSlots;
+    }
+
     public void callsMethod(CallingConvention cc) {
         calls.add(cc);
     }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/SimpleVirtualStackSlot.java	Wed Nov 19 17:31:31 2014 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/SimpleVirtualStackSlot.java	Thu Nov 20 10:32:55 2014 +0100
@@ -32,8 +32,8 @@
 
     private static final long serialVersionUID = 7654295701165421750L;
 
-    public SimpleVirtualStackSlot(LIRKind lirKind) {
-        super(lirKind);
+    public SimpleVirtualStackSlot(int id, LIRKind lirKind) {
+        super(id, lirKind);
     }
 
 }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/VirtualStackSlotRange.java	Wed Nov 19 17:31:31 2014 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/VirtualStackSlotRange.java	Thu Nov 20 10:32:55 2014 +0100
@@ -37,8 +37,8 @@
     private final BitSet objects;
     private final int slots;
 
-    public VirtualStackSlotRange(int slots, BitSet objects) {
-        super(LIRKind.reference(Kind.Object));
+    public VirtualStackSlotRange(int id, int slots, BitSet objects) {
+        super(id, LIRKind.reference(Kind.Object));
         this.slots = slots;
         this.objects = (BitSet) objects.clone();
     }