# HG changeset patch # User Thomas Wuerthinger # Date 1305723900 -7200 # Node ID c4201554beebca2342eda9b5e493e3fcc0f1166e # Parent 785e9ecdcc693fb281c34974151b8ea38bcf9df3# Parent 79590d6b4a7cef3ca42fdf7c5c898ac6f6de1d72 Merge. diff -r 785e9ecdcc69 -r c4201554beeb graal/GraalCompiler/.classpath diff -r 785e9ecdcc69 -r c4201554beeb graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java Wed May 18 15:03:45 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java Wed May 18 15:05:00 2011 +0200 @@ -23,6 +23,7 @@ package com.sun.c1x.debug; import java.io.*; +import java.util.regex.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.vis.*; @@ -38,6 +39,8 @@ */ public class GraphvizPrinterObserver implements CompilationObserver { + private static final Pattern INVALID_CHAR = Pattern.compile("[^A-Za-z0-9_.-]"); + private final boolean pdf; private int n; @@ -59,11 +62,15 @@ String name = event.getMethod().holder().name(); name = name.substring(1, name.length() - 1).replace('/', '.'); name = name + "." + event.getMethod().name(); + String filename = name + "_" + (n++) + "_" + event.getLabel(); + filename = INVALID_CHAR.matcher(filename).replaceAll("_"); + + OutputStream out = null; try { if (pdf) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - GraphvizPrinter printer = new GraphvizPrinter(out); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + GraphvizPrinter printer = new GraphvizPrinter(buffer); if (C1XOptions.OmitDOTFrameStates) { printer.addOmittedClass(FrameState.class); } @@ -71,24 +78,28 @@ printer.print(graph, true); printer.end(); - FileOutputStream output = new FileOutputStream(filename + ".pdf"); - GraphvizRunner.process(GraphvizRunner.DOT_LAYOUT, new ByteArrayInputStream(out.toByteArray()), output, "pdf"); - output.close(); + out = new FileOutputStream(filename + ".pdf"); + GraphvizRunner.process(GraphvizRunner.DOT_LAYOUT, new ByteArrayInputStream(buffer.toByteArray()), out, "pdf"); } else { - final FileOutputStream stream = new FileOutputStream(filename + ".gv"); + out = new FileOutputStream(filename + ".gv"); - GraphvizPrinter printer = new GraphvizPrinter(stream); + GraphvizPrinter printer = new GraphvizPrinter(out); if (C1XOptions.OmitDOTFrameStates) { printer.addOmittedClass(FrameState.class); } printer.begin(name); printer.print(graph, true); printer.end(); - - stream.close(); } } catch (IOException e) { e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + } + } } } } diff -r 785e9ecdcc69 -r c4201554beeb graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java Wed May 18 15:03:45 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java Wed May 18 15:05:00 2011 +0200 @@ -63,20 +63,33 @@ } /** - * Starts a new graph document containing a single group of graphs with the given name, short name and byte code - * index (BCI) as properties. + * Starts a new graph document. */ - public void begin(String name, String shortName, int bci) { - stream.println(""); + public void begin() { + stream.println(""); + } + + /** + * Starts a new group of graphs with the given name, short name and method byte code index (BCI) as properties. + */ + public void beginGroup(String name, String shortName, int bci) { + stream.println(""); stream.printf("

%s

%n", escape(name)); stream.printf(" %n", escape(name), escape(shortName), bci); } /** - * Finishes the graph document. + * Ends the current group. + */ + public void endGroup() { + stream.println("
"); + } + + /** + * Finishes the graph document and flushes the output stream. */ public void end() { - stream.println("
"); + stream.println(""); stream.flush(); } diff -r 785e9ecdcc69 -r c4201554beeb graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinterObserver.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinterObserver.java Wed May 18 15:03:45 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinterObserver.java Wed May 18 15:05:00 2011 +0200 @@ -23,6 +23,7 @@ package com.sun.c1x.debug; import java.io.*; +import java.util.regex.*; import com.oracle.graal.graph.*; import com.sun.c1x.*; @@ -32,11 +33,13 @@ /** * Observes compilation events and uses {@link IdealGraphPrinter} to generate a graph representation that can be * inspected with the Ideal Graph Visualizer. - * + * * @author Peter Hofer */ public class IdealGraphPrinterObserver implements CompilationObserver { + private static final Pattern INVALID_CHAR = Pattern.compile("[^A-Za-z0-9_.-]"); + private IdealGraphPrinter printer; private OutputStream stream; @@ -48,7 +51,10 @@ String name = event.getMethod().holder().name(); name = name.substring(1, name.length() - 1).replace('/', '.'); name = name + "." + event.getMethod().name(); + String filename = name + ".igv.xml"; + filename = INVALID_CHAR.matcher(filename).replaceAll("_"); + try { stream = new FileOutputStream(filename); printer = new IdealGraphPrinter(stream); @@ -57,7 +63,8 @@ printer.addOmittedClass(FrameState.class); } - printer.begin(name, name, -1); + printer.begin(); + printer.beginGroup(name, name, -1); } catch (IOException e) { e.printStackTrace(); } @@ -76,6 +83,7 @@ public void compilationFinished(CompilationEvent event) { if (printer != null) { try { + printer.endGroup(); printer.end(); stream.close(); } catch (IOException e) { diff -r 785e9ecdcc69 -r c4201554beeb graal/GraalCompiler/src/com/sun/c1x/value/ValueUtil.java --- a/graal/GraalCompiler/src/com/sun/c1x/value/ValueUtil.java Wed May 18 15:03:45 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/value/ValueUtil.java Wed May 18 15:05:00 2011 +0200 @@ -23,6 +23,7 @@ package com.sun.c1x.value; import com.sun.c1x.ir.*; +import com.sun.c1x.util.*; import com.sun.cri.ci.*; @@ -73,7 +74,7 @@ } public static boolean typeMismatch(Value x, Value y) { - return y == null || x.kind != y.kind; + return y == null || !Util.archKindsEqual(x, y); } public static boolean isDoubleWord(Value x) { diff -r 785e9ecdcc69 -r c4201554beeb graal/GraalRuntime/.classpath diff -r 785e9ecdcc69 -r c4201554beeb runtests.sh