changeset 20916:661ed7d3d10d

RegisterConfig: rename getAllocatableRegisters(PK,R[) to filterAllocatableRegisters and remove caching from implementors.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 13 Apr 2015 16:50:27 +0200
parents 916aac9fe6f7
children 6aea1527de7b
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/RegisterAllocationConfig.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java
diffstat 4 files changed, 4 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java	Mon Apr 13 15:10:55 2015 +0200
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java	Mon Apr 13 16:50:27 2015 +0200
@@ -79,7 +79,7 @@
      * Gets the set of registers that can be used by the register allocator for a value of a
      * particular kind.
      */
-    Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers);
+    Register[] filterAllocatableRegisters(PlatformKind kind, Register[] registers);
 
     /**
      * Gets the registers whose values must be preserved by a method across any call it makes.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/RegisterAllocationConfig.java	Mon Apr 13 15:10:55 2015 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/RegisterAllocationConfig.java	Mon Apr 13 16:50:27 2015 +0200
@@ -77,7 +77,7 @@
             return val;
         }
 
-        Register[] ret = registerConfig.getAllocatableRegisters(kind, getAllocatableRegisters());
+        Register[] ret = registerConfig.filterAllocatableRegisters(kind, getAllocatableRegisters());
         categorized.put(key, ret);
         return ret;
 
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java	Mon Apr 13 15:10:55 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java	Mon Apr 13 16:50:27 2015 +0200
@@ -26,7 +26,6 @@
 import static com.oracle.graal.compiler.common.GraalOptions.*;
 
 import java.util.*;
-import java.util.concurrent.*;
 
 import com.oracle.graal.amd64.*;
 import com.oracle.graal.api.code.*;
@@ -52,8 +51,6 @@
 
     private final boolean allAllocatableAreCallerSaved;
 
-    private final Map<PlatformKind.Key, Register[]> categorized = new ConcurrentHashMap<>();
-
     private final RegisterAttributes[] attributesMap;
 
     public int getMaximumFrameSize() {
@@ -65,13 +62,7 @@
         return allocatable.clone();
     }
 
-    public Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers) {
-        PlatformKind.Key key = kind.getKey();
-        if (categorized.containsKey(key)) {
-            Register[] val = categorized.get(key);
-            return val;
-        }
-
+    public Register[] filterAllocatableRegisters(PlatformKind kind, Register[] registers) {
         ArrayList<Register> list = new ArrayList<>();
         for (Register reg : registers) {
             if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) {
@@ -80,7 +71,6 @@
         }
 
         Register[] ret = list.toArray(new Register[list.size()]);
-        categorized.put(key, ret);
         return ret;
     }
 
@@ -101,15 +91,6 @@
 
     private final CalleeSaveLayout csl;
 
-    private static Register findRegister(String name, Register[] all) {
-        for (Register reg : all) {
-            if (reg.name.equals(name)) {
-                return reg;
-            }
-        }
-        throw new IllegalArgumentException("register " + name + " is not allocatable");
-    }
-
     private static Register[] initAllocatable(boolean reserveForHeapBase) {
         Register[] registers = null;
         // @formatter:off
@@ -127,16 +108,6 @@
                       };
         }
        // @formatter:on
-
-        if (RegisterPressure.getValue() != null) {
-            String[] names = RegisterPressure.getValue().split(",");
-            Register[] regs = new Register[names.length];
-            for (int i = 0; i < names.length; i++) {
-                regs[i] = findRegister(names[i], registers);
-            }
-            return regs;
-        }
-
         return registers;
     }
 
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Mon Apr 13 15:10:55 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Mon Apr 13 16:50:27 2015 +0200
@@ -22,11 +22,9 @@
  */
 package com.oracle.graal.hotspot.sparc;
 
-import static com.oracle.graal.compiler.common.GraalOptions.*;
 import static com.oracle.graal.sparc.SPARC.*;
 
 import java.util.*;
-import java.util.concurrent.*;
 
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.code.CallingConvention.Type;
@@ -43,8 +41,6 @@
 
     private final Register[] allocatable;
 
-    private final Map<PlatformKind, Register[]> categorized = new ConcurrentHashMap<>(20);
-
     private final RegisterAttributes[] attributesMap;
 
     @Override
@@ -52,11 +48,7 @@
         return allocatable.clone();
     }
 
-    public Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers) {
-        if (categorized.containsKey(kind)) {
-            return categorized.get(kind);
-        }
-
+    public Register[] filterAllocatableRegisters(PlatformKind kind, Register[] registers) {
         ArrayList<Register> list = new ArrayList<>();
         for (Register reg : registers) {
             if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) {
@@ -77,7 +69,6 @@
         }
 
         Register[] ret = list.toArray(new Register[list.size()]);
-        categorized.put(kind, ret);
         return ret;
     }
 
@@ -111,15 +102,6 @@
 
     private final CalleeSaveLayout csl;
 
-    private static Register findRegister(String name, Register[] all) {
-        for (Register reg : all) {
-            if (reg.name.equals(name)) {
-                return reg;
-            }
-        }
-        throw new IllegalArgumentException("register " + name + " is not allocatable");
-    }
-
     private static Register[] initAllocatable(boolean reserveForHeapBase) {
         Register[] registers = null;
         if (reserveForHeapBase) {
@@ -158,15 +140,6 @@
             // @formatter:on
         }
 
-        if (RegisterPressure.getValue() != null) {
-            String[] names = RegisterPressure.getValue().split(",");
-            Register[] regs = new Register[names.length];
-            for (int i = 0; i < names.length; i++) {
-                regs[i] = findRegister(names[i], registers);
-            }
-            return regs;
-        }
-
         return registers;
     }