Mercurial > hg > truffle
changeset 19029:d80301977c5e
StackSlotAllocator: add CFGPrinter support for StackIntervals.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 13 Jan 2015 17:43:04 +0100 |
parents | f59fc4850df5 |
children | f585f067d78e |
files | graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java |
diffstat | 2 files changed, 44 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Tue Jan 13 17:42:08 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Tue Jan 13 17:43:04 2015 +0100 @@ -37,6 +37,7 @@ import com.oracle.graal.java.*; import com.oracle.graal.java.BciBlockMapping.BciBlock; import com.oracle.graal.lir.*; +import com.oracle.graal.lir.framemap.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; @@ -560,6 +561,46 @@ out.println(); } + public void printStackIntervals(String label, StackInterval[] intervals) { + begin("intervals"); + out.println(String.format("name \"%s\"", label)); + + for (StackInterval interval : intervals) { + if (interval != null) { + printStackInterval(interval); + } + } + + end("intervals"); + } + + private void printStackInterval(StackInterval interval) { + out.printf("%s %s ", interval.getOperand(), interval.isFixed() ? "fixed" : interval.kind().getPlatformKind()); + if (interval.location() != null) { + out.printf("\"[%s|%c]\"", interval.location(), interval.location().getKind().getTypeChar()); + } else { + out.printf("\"[%s|%c]\"", interval.getOperand(), interval.getOperand().getKind().getTypeChar()); + } + + StackInterval hint = interval.locationHint(); + out.printf("%s %s ", interval.getOperand(), hint != null ? hint.getOperand() : -1); + + out.printf("[%d, %d[", interval.from(), interval.to()); + + // print use positions + int prev = -1; + StackUsePosList usePosList = interval.usePosList(); + for (int i = usePosList.size() - 1; i >= 0; --i) { + assert prev <= usePosList.usePos(i) : "use positions not sorted"; + out.printf("%d %s ", usePosList.usePos(i), usePosList.getType(i)); + prev = usePosList.usePos(i); + } + + // print spill state + out.printf(" \"%s\"", "NOT_SUPPORTED"); + out.println(); + } + public void printSchedule(String message, SchedulePhase theSchedule) { schedule = theSchedule; cfg = schedule.getCFG();
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java Tue Jan 13 17:42:08 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java Tue Jan 13 17:43:04 2015 +0100 @@ -35,6 +35,7 @@ import com.oracle.graal.graph.*; import com.oracle.graal.java.*; import com.oracle.graal.lir.*; +import com.oracle.graal.lir.framemap.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.phases.schedule.*; @@ -181,7 +182,8 @@ cfgPrinter.printMachineCode(codeCache.disassemble((CompilationResult) tuple[0], (InstalledCode) tuple[1]), message); } else if (object instanceof Interval[]) { cfgPrinter.printIntervals(message, (Interval[]) object); - + } else if (object instanceof StackInterval[]) { + cfgPrinter.printStackIntervals(message, (StackInterval[]) object); } cfgPrinter.target = null;