changeset 22212:34c1bf2ee374

LinearScanWalker: minor refactoring of debug code.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 09 Jul 2015 11:16:30 +0200
parents a634b6f23af6
children 8a005c1541aa
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java
diffstat 1 files changed, 17 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java	Wed Jul 08 18:18:24 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java	Thu Jul 09 11:16:30 2015 +0200
@@ -781,16 +781,7 @@
             spillCollectInactiveAny(interval);
 
             if (Debug.isLogEnabled()) {
-                try (Indent indent2 = Debug.logAndIndent("state of registers:")) {
-                    for (Register reg : availableRegs) {
-                        int i = reg.number;
-                        try (Indent indent3 = Debug.logAndIndent("reg %d: usePos: %d, blockPos: %d, intervals: ", i, usePos[i], blockPos[i])) {
-                            for (int j = 0; j < spillIntervals[i].size(); j++) {
-                                Debug.log("%d ", spillIntervals[i].get(j).operandNumber);
-                            }
-                        }
-                    }
-                }
+                printRegisterState();
             }
 
             // the register must be free at least until this position
@@ -820,10 +811,11 @@
                 }
 
                 if (firstUsage <= interval.from() + 1) {
-                    String description = "cannot spill interval that is used in first instruction (possible reason: no register found) firstUsage=" + firstUsage + ", interval.from()=" +
-                                    interval.from() + "; already used candidates: " + Arrays.toString(availableRegs);
+                    String description = "cannot spill interval (" + interval + ") that is used in first instruction (possible reason: no register found) firstUsage=" + firstUsage +
+                                    ", interval.from()=" + interval.from() + "; already used candidates: " + Arrays.toString(availableRegs);
                     // assign a reasonable register and do a bailout in product mode to avoid errors
                     allocator.assignSpillSlot(interval);
+                    Debug.dump(allocator.ir, description);
                     allocator.printIntervals(description);
                     throw new OutOfRegistersException("LinearScan: no register found", description);
                 }
@@ -853,6 +845,19 @@
         }
     }
 
+    void printRegisterState() {
+        try (Indent indent2 = Debug.logAndIndent("state of registers:")) {
+            for (Register reg : availableRegs) {
+                int i = reg.number;
+                try (Indent indent3 = Debug.logAndIndent("reg %d: usePos: %d, blockPos: %d, intervals: ", i, usePos[i], blockPos[i])) {
+                    for (int j = 0; j < spillIntervals[i].size(); j++) {
+                        Debug.log("%s ", spillIntervals[i].get(j));
+                    }
+                }
+            }
+        }
+    }
+
     boolean noAllocationPossible(Interval interval) {
         if (allocator.callKillsRegisters) {
             // fast calculation of intervals that can never get a register because the