From 7d4e3cb4e0256d9f499ea72bcc588b0ce3d9258c Mon Sep 17 00:00:00 2001 From: neliasso Date: Mon, 26 Nov 2012 15:11:55 +0100 Subject: [PATCH] 8003983: LogCompilation tool is broken since c1 support Summary: Fixed emitting and parsing Reviewed-by: jrose, kvn --- .../hotspot/tools/compiler/LogCompilation.java | 2 +- .../sun/hotspot/tools/compiler/LogParser.java | 16 +++++++++------- src/share/vm/c1/c1_Compilation.cpp | 8 ++++++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogCompilation.java b/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogCompilation.java index 39b0a9cda..46991bc8d 100644 --- a/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogCompilation.java +++ b/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogCompilation.java @@ -37,7 +37,7 @@ import org.xml.sax.helpers.*; public class LogCompilation extends DefaultHandler implements ErrorHandler, Constants { public static void usage(int exitcode) { - System.out.println("Usage: LogCompilation [ -v ] [ -c ] [ -s ] [ -e | -N ] file1 ..."); + System.out.println("Usage: LogCompilation [ -v ] [ -c ] [ -s ] [ -e | -n ] file1 ..."); System.out.println(" -c: clean up malformed 1.5 xml"); System.out.println(" -i: print inlining decisions"); System.out.println(" -S: print compilation statistics"); diff --git a/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogParser.java b/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogParser.java index 8add9ecd3..80a00364c 100644 --- a/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogParser.java +++ b/src/share/tools/LogCompilation/src/com/sun/hotspot/tools/compiler/LogParser.java @@ -224,7 +224,6 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants throw new InternalError("can't find " + name); } int indent = 0; - String compile_id; String type(String id) { String result = types.get(id); @@ -268,7 +267,7 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants if (qname.equals("phase")) { Phase p = new Phase(search(atts, "name"), Double.parseDouble(search(atts, "stamp")), - Integer.parseInt(search(atts, "nodes")), + Integer.parseInt(search(atts, "nodes", "0")), Integer.parseInt(search(atts, "live"))); phaseStack.push(p); } else if (qname.equals("phase_done")) { @@ -278,7 +277,7 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants throw new InternalError("phase name mismatch"); } p.setEnd(Double.parseDouble(search(atts, "stamp"))); - p.setEndNodes(Integer.parseInt(search(atts, "nodes"))); + p.setEndNodes(Integer.parseInt(search(atts, "nodes", "0"))); p.setEndLiveNodes(Integer.parseInt(search(atts, "live"))); compile.getPhases().add(p); } else if (qname.equals("task")) { @@ -323,13 +322,16 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants m.setName(search(atts, "name")); m.setReturnType(type(search(atts, "return"))); m.setArguments(search(atts, "arguments", "void")); - m.setBytes(search(atts, "bytes")); - m.setIICount(search(atts, "iicount")); - m.setFlags(search(atts, "flags")); + + if (search(atts, "unloaded", "0").equals("0")) { + m.setBytes(search(atts, "bytes")); + m.setIICount(search(atts, "iicount")); + m.setFlags(search(atts, "flags")); + } methods.put(id, m); } else if (qname.equals("call")) { site = new CallSite(bci, method(search(atts, "method"))); - site.setCount(Integer.parseInt(search(atts, "count"))); + site.setCount(Integer.parseInt(search(atts, "count", "0"))); String receiver = atts.getValue("receiver"); if (receiver != null) { site.setReceiver(type(receiver)); diff --git a/src/share/vm/c1/c1_Compilation.cpp b/src/share/vm/c1/c1_Compilation.cpp index 68d3d2cc3..cc268ef14 100644 --- a/src/share/vm/c1/c1_Compilation.cpp +++ b/src/share/vm/c1/c1_Compilation.cpp @@ -129,7 +129,15 @@ void Compilation::build_hir() { CHECK_BAILOUT(); // setup ir + CompileLog* log = this->log(); + if (log != NULL) { + log->begin_head("parse method='%d' ", + log->identify(_method)); + log->stamp(); + log->end_head(); + } _hir = new IR(this, method(), osr_bci()); + if (log) log->done("parse"); if (!_hir->is_valid()) { bailout("invalid parsing"); return; -- GitLab