changeset 22363:8fbf5bd5c406

SSIBlockValueMapImpl: use VariableVirtualStackValueMap in BlockData.
author Josef Eisl <josef.eisl@jku.at>
date Fri, 24 Jul 2015 15:38:17 +0200
parents be38501e40e7
children fd8b493efd48
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java
diffstat 1 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java	Fri Jul 24 15:26:17 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java	Fri Jul 24 15:38:17 2015 +0200
@@ -40,15 +40,15 @@
 
 public final class SSIBlockValueMapImpl implements BlockValueMap {
 
-    private final class BlockData {
+    private static final class BlockData {
 
         /** Mapping from value to index into {@link #incoming} */
         private final ValueMap<Value, Integer> valueIndexMap;
         private final ArrayList<Value> incoming;
         private final ArrayList<Value> outgoing;
 
-        private BlockData() {
-            valueIndexMap = new GenericValueMap<>();
+        private BlockData(int initialVariableCapacity, int initialStackSlotCapacity) {
+            valueIndexMap = new VariableVirtualStackValueMap<>(initialVariableCapacity, initialStackSlotCapacity);
             incoming = new ArrayList<>();
             outgoing = new ArrayList<>();
         }
@@ -66,6 +66,7 @@
         }
 
         public int addIncoming(Value operand) {
+            assert isVariable(operand) || isVirtualStackSlot(operand) : "Not a variable or vstack: " + operand;
             int index = incoming.size();
             incoming.add(Value.ILLEGAL);
             valueIndexMap.put(operand, index);
@@ -87,9 +88,13 @@
     /** Mapping from value to definition block. */
     private final ValueMap<Value, AbstractBlockBase<?>> valueToDefBlock;
     private final BlockMap<BlockData> blockData;
+    private final int initialVariableCapacity;
+    private final int initialStackSlotCapacity;
 
-    public SSIBlockValueMapImpl(AbstractControlFlowGraph<?> cfg, int initialVariableCapacity, int initialStackSlotCapazity) {
-        valueToDefBlock = new VariableVirtualStackValueMap<>(initialVariableCapacity, initialStackSlotCapazity);
+    public SSIBlockValueMapImpl(AbstractControlFlowGraph<?> cfg, int initialVariableCapacity, int initialStackSlotCapacity) {
+        this.initialVariableCapacity = initialVariableCapacity;
+        this.initialStackSlotCapacity = initialStackSlotCapacity;
+        valueToDefBlock = new VariableVirtualStackValueMap<>(initialVariableCapacity, initialStackSlotCapacity);
         blockData = new BlockMap<>(cfg);
     }
 
@@ -143,7 +148,7 @@
     private BlockData getOrInit(AbstractBlockBase<?> block) {
         BlockData data = blockData.get(block);
         if (data == null) {
-            data = new BlockData();
+            data = new BlockData(initialVariableCapacity, initialStackSlotCapacity);
             blockData.put(block, data);
         }
         return data;