--- a/hotspot/src/share/vm/opto/compile.cpp Mon May 26 10:48:58 2014 +0200
+++ b/hotspot/src/share/vm/opto/compile.cpp Mon May 26 14:27:01 2014 +0200
@@ -672,6 +672,7 @@
_print_inlining_list(NULL),
_print_inlining_stream(NULL),
_print_inlining_idx(0),
+ _print_inlining_output(NULL),
_preserve_jvm_state(0),
_interpreter_frame_size(0) {
C = this;
@@ -978,6 +979,7 @@
_print_inlining_list(NULL),
_print_inlining_stream(NULL),
_print_inlining_idx(0),
+ _print_inlining_output(NULL),
_preserve_jvm_state(0),
_allowed_reasons(0),
_interpreter_frame_size(0) {
@@ -2207,7 +2209,7 @@
} // (End scope of igvn; run destructor if necessary for asserts.)
- dump_inlining();
+ process_print_inlining();
// A method with only infinite loops has no edges entering loops from root
{
NOT_PRODUCT( TracePhase t2("graphReshape", &_t_graphReshaping, TimeCompiler); )
@@ -3868,7 +3870,7 @@
assert(!_print_inlining || _print_inlining_stream->size() == 0, "loosing data");
}
-void Compile::dump_inlining() {
+void Compile::process_print_inlining() {
bool do_print_inlining = print_inlining() || print_intrinsics();
if (do_print_inlining || log() != NULL) {
// Print inlining message for candidates that we couldn't inline
@@ -3885,9 +3887,21 @@
}
}
if (do_print_inlining) {
+ ResourceMark rm;
+ stringStream ss;
for (int i = 0; i < _print_inlining_list->length(); i++) {
- tty->print("%s", _print_inlining_list->adr_at(i)->ss()->as_string());
+ ss.print("%s", _print_inlining_list->adr_at(i)->ss()->as_string());
}
+ size_t end = ss.size();
+ _print_inlining_output = NEW_ARENA_ARRAY(comp_arena(), char, end+1);
+ strncpy(_print_inlining_output, ss.base(), end+1);
+ _print_inlining_output[end] = 0;
+ }
+}
+
+void Compile::dump_print_inlining() {
+ if (_print_inlining_output != NULL) {
+ tty->print_raw(_print_inlining_output);
}
}