changeset 20913:9b6ea36013c4

RegisterConfig: pass registers array to getAllocatableRegisters(PlatformKind).
author Josef Eisl <josef.eisl@jku.at>
date Mon, 13 Apr 2015 14:50:25 +0200
parents b14a235f06eb
children 4278c6500f2a
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.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 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java
diffstat 5 files changed, 8 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java	Mon Apr 13 14:31:43 2015 +0200
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java	Mon Apr 13 14:50:25 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[] getAllocatableRegisters(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.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Mon Apr 13 14:31:43 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Mon Apr 13 14:50:25 2015 +0200
@@ -192,7 +192,7 @@
 
     private Register findPollOnReturnScratchRegister() {
         RegisterConfig regConfig = getProviders().getCodeCache().getRegisterConfig();
-        for (Register r : regConfig.getAllocatableRegisters(Kind.Long)) {
+        for (Register r : regConfig.getAllocatableRegisters()) {
             if (!r.equals(regConfig.getReturnRegister(Kind.Long)) && !r.equals(AMD64.rbp)) {
                 return r;
             }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java	Mon Apr 13 14:31:43 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java	Mon Apr 13 14:50:25 2015 +0200
@@ -65,7 +65,7 @@
         return allocatable.clone();
     }
 
-    public Register[] getAllocatableRegisters(PlatformKind kind) {
+    public Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers) {
         PlatformKind.Key key = kind.getKey();
         if (categorized.containsKey(key)) {
             Register[] val = categorized.get(key);
@@ -73,7 +73,7 @@
         }
 
         ArrayList<Register> list = new ArrayList<>();
-        for (Register reg : getAllocatableRegisters()) {
+        for (Register reg : registers) {
             if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) {
                 list.add(reg);
             }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Mon Apr 13 14:31:43 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Mon Apr 13 14:50:25 2015 +0200
@@ -52,13 +52,13 @@
         return allocatable.clone();
     }
 
-    public Register[] getAllocatableRegisters(PlatformKind kind) {
+    public Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers) {
         if (categorized.containsKey(kind)) {
             return categorized.get(kind);
         }
 
         ArrayList<Register> list = new ArrayList<>();
-        for (Register reg : getAllocatableRegisters()) {
+        for (Register reg : registers) {
             if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) {
                 // Special treatment for double precision
                 // TODO: This is wasteful it uses only half of the registers as float.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java	Mon Apr 13 14:31:43 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java	Mon Apr 13 14:50:25 2015 +0200
@@ -766,7 +766,8 @@
     }
 
     void initVarsForAlloc(Interval interval) {
-        availableRegs = allocator.frameMapBuilder.getRegisterConfig().getAllocatableRegisters(interval.kind().getPlatformKind());
+        RegisterConfig registerConfig = allocator.frameMapBuilder.getRegisterConfig();
+        availableRegs = registerConfig.getAllocatableRegisters(interval.kind().getPlatformKind(), registerConfig.getAllocatableRegisters());
     }
 
     static boolean isMove(LIRInstruction op, Interval from, Interval to) {