Mercurial > hg > truffle
changeset 11379:0942e34b6c7d
added PrintBackendCFG option (default is true) for controlling if backend output is dumped to the C1Visualizer
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 20 Aug 2013 18:23:43 +0200 |
parents | 7e297d001c30 |
children | d9bcf8789d57 |
files | graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DebugEnvironment.java |
diffstat | 4 files changed, 37 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Tue Aug 20 16:09:26 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Tue Aug 20 18:23:43 2013 +0200 @@ -146,12 +146,14 @@ @Option(help = "") public static final OptionValue<Integer> GCDebugStartCycle = new OptionValue<>(-1); // Ideal graph visualizer output settings - @Option(help = "") + @Option(help = "Dump IdealGraphVisualizer output in binary format") public static final OptionValue<Boolean> PrintBinaryGraphs = new OptionValue<>(true); - @Option(help = "outputs probabilities for fixed nodes during binary graph dumping") + @Option(help = "Output probabilities for fixed nodes during binary graph dumping") public static final OptionValue<Boolean> PrintGraphProbabilities = new OptionValue<>(false); - @Option(help = "") + @Option(help = "Enables dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.") public static final OptionValue<Boolean> PrintCFG = new OptionValue<>(false); + @Option(help = "Enables dumping LIR, register allocation and code generation info to the C1Visualizer.") + public static final OptionValue<Boolean> PrintBackendCFG = new OptionValue<>(true); @Option(help = "") public static final OptionValue<Boolean> PrintIdealGraphFile = new OptionValue<>(false); @Option(help = "") @@ -245,7 +247,7 @@ public static final OptionValue<Double> MinTableSwitchDensity = new OptionValue<>(0.5); // Ahead of time compilation - @Option(help = "configure compiler to emit code compatible with AOT requirements for HotSpot") + @Option(help = "Configure compiler to emit code compatible with AOT requirements for HotSpot") public static final OptionValue<Boolean> AOTCompilation = new OptionValue<>(false); // Runtime settings
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Tue Aug 20 16:09:26 2013 +0200 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Tue Aug 20 18:23:43 2013 +0200 @@ -127,7 +127,7 @@ * @param label A label describing the compilation phase that produced the control flow graph. * @param blocks The list of blocks to be printed. */ - public void printCFG(String label, List<Block> blocks) { + public void printCFG(String label, List<Block> blocks, boolean printNodes) { if (lir == null) { latestScheduling = new NodeMap<>(cfg.getNodeToBlock()); for (Block block : blocks) { @@ -149,7 +149,7 @@ begin("cfg"); out.print("name \"").print(label).println('"'); for (Block block : blocks) { - printBlock(block); + printBlock(block, printNodes); } end("cfg"); @@ -185,7 +185,7 @@ } } - private void printBlock(Block block) { + private void printBlock(Block block, boolean printNodes) { begin("block"); out.print("name \"").print(blockToString(block)).println('"'); @@ -231,7 +231,9 @@ out.print("loop_depth ").println(block.getLoop().depth); } - printNodes(block); + if (printNodes) { + printNodes(block); + } printLIR(block); end("block"); }
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java Tue Aug 20 16:09:26 2013 +0200 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java Tue Aug 20 18:23:43 2013 +0200 @@ -47,6 +47,12 @@ private File cfgFile; private JavaMethod curMethod; private List<String> curDecorators = Collections.emptyList(); + private final boolean dumpFrontend; + private Object previousObject; + + public CFGPrinterObserver(boolean dumpFrontend) { + this.dumpFrontend = dumpFrontend; + } @Override public void dump(Object object, String message) { @@ -100,8 +106,16 @@ private static final long timestamp = System.currentTimeMillis(); private static final AtomicInteger uniqueId = new AtomicInteger(); + private static boolean isFrontendObject(Object object) { + return object instanceof Graph || object instanceof BciBlockMapping; + } + public void dumpSandboxed(Object object, String message) { + if (!dumpFrontend && isFrontendObject(object)) { + return; + } + if (cfgPrinter == null) { cfgFile = new File("compilations-" + timestamp + "_" + uniqueId.incrementAndGet() + ".cfg"); try { @@ -143,14 +157,17 @@ } } else if (object instanceof LIR) { - cfgPrinter.printCFG(message, cfgPrinter.lir.codeEmittingOrder()); + // No need to print the HIR nodes again if this is not the first + // time dumping the same LIR since the HIR will not have changed. + boolean printNodes = previousObject != object; + cfgPrinter.printCFG(message, cfgPrinter.lir.codeEmittingOrder(), printNodes); } else if (object instanceof StructuredGraph) { if (cfgPrinter.cfg == null) { StructuredGraph graph = (StructuredGraph) object; cfgPrinter.cfg = ControlFlowGraph.compute(graph, true, true, true, false); } - cfgPrinter.printCFG(message, Arrays.asList(cfgPrinter.cfg.getBlocks())); + cfgPrinter.printCFG(message, Arrays.asList(cfgPrinter.cfg.getBlocks()), true); } else if (object instanceof CompilationResult) { final CompilationResult compResult = (CompilationResult) object; @@ -168,6 +185,8 @@ cfgPrinter.lirGenerator = null; cfgPrinter.cfg = null; cfgPrinter.flush(); + + previousObject = object; } private static boolean isCompilationResultAndInstalledCode(Object object) {
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DebugEnvironment.java Tue Aug 20 16:09:26 2013 +0200 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DebugEnvironment.java Tue Aug 20 18:23:43 2013 +0200 @@ -37,11 +37,11 @@ Debug.enable(); List<DebugDumpHandler> dumpHandlers = new ArrayList<>(); dumpHandlers.add(new GraphPrinterDumpHandler()); - if (PrintCFG.getValue()) { - if (PrintBinaryGraphs.getValue()) { - TTY.println("CFG dumping slows down PrintBinaryGraphs: use -G:-PrintCFG to disable it"); + if (PrintCFG.getValue() || PrintBackendCFG.getValue()) { + if (PrintBinaryGraphs.getValue() && PrintCFG.getValue()) { + TTY.println("Complete C1Visualizer dumping slows down PrintBinaryGraphs: use -G:-PrintCFG to disable it"); } - dumpHandlers.add(new CFGPrinterObserver()); + dumpHandlers.add(new CFGPrinterObserver(PrintCFG.getValue())); } if (DecompileAfterPhase.getValue() != null) { dumpHandlers.add(new DecompilerDebugDumpHandler());