From d40bbe00edd5c47e1c648b8774f701334f73ff42 Mon Sep 17 00:00:00 2001 From: vlivanov Date: Mon, 14 Jul 2014 03:28:13 -0700 Subject: [PATCH] 8049532: LogCompilation: C1: inlining tree is flat (no depth is stored) Reviewed-by: roland, iveresov --- .../com/sun/hotspot/tools/compiler/LogParser.java | 14 +++++++++++--- src/share/vm/c1/c1_GraphBuilder.cpp | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) 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 c24a2103e..ecd17b309 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 @@ -406,9 +406,17 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants } else if (scopes.peek().getCalls().size() > 2 && m == scopes.peek().last(-2).getMethod()) { scopes.push(scopes.peek().last(-2)); } else { - System.out.println(site.getMethod()); - System.out.println(m); - throw new InternalError("call site and parse don't match"); + // C1 prints multiple method tags during inlining when it narrows method being inlinied. + // Example: + // ... + // + // + // + // + // + // ... + site.setMethod(m); + scopes.push(site); } } } else if (qname.equals("parse_done")) { diff --git a/src/share/vm/c1/c1_GraphBuilder.cpp b/src/share/vm/c1/c1_GraphBuilder.cpp index 3198ae87f..c11c1251d 100644 --- a/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/src/share/vm/c1/c1_GraphBuilder.cpp @@ -3960,10 +3960,15 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode // Clear out bytecode stream scope_data()->set_stream(NULL); + CompileLog* log = compilation()->log(); + if (log != NULL) log->head("parse method='%d'", log->identify(callee)); + // Ready to resume parsing in callee (either in the same block we // were in before or in the callee's start block) iterate_all_blocks(callee_start_block == NULL); + if (log != NULL) log->done("parse"); + // If we bailed out during parsing, return immediately (this is bad news) if (bailed_out()) return false; -- GitLab