Mercurial > hg > graal-compiler
changeset 7568:140d4d4ab3b9
added per-compiler compilation speed statistics for C1 and C2 (included in output produced by -XX:+CITime)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 30 Jan 2013 21:36:28 +0100 |
parents | a8bc60aeacb8 |
children | 7cae58134ff7 |
files | src/share/vm/compiler/abstractCompiler.hpp src/share/vm/compiler/compileBroker.cpp src/share/vm/graal/graalCompiler.hpp |
diffstat | 3 files changed, 46 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/compiler/abstractCompiler.hpp Wed Jan 30 18:19:01 2013 +0100 +++ b/src/share/vm/compiler/abstractCompiler.hpp Wed Jan 30 21:36:28 2013 +0100 @@ -29,6 +29,17 @@ typedef void (*initializer)(void); +#ifdef GRAAL +class CompilerStatistics { + public: + elapsedTimer _t_osr_compilation; + elapsedTimer _t_standard_compilation; + int _sum_osr_bytes_compiled; + int _sum_standard_bytes_compiled; + CompilerStatistics() : _sum_osr_bytes_compiled(0), _sum_standard_bytes_compiled(0) {} +}; +#endif + class AbstractCompiler : public CHeapObj<mtCompiler> { private: bool _is_initialized; // Mark whether compiler object is initialized @@ -49,6 +60,10 @@ private: Type _type; +#ifdef GRAAL + CompilerStatistics _stats; +#endif + public: AbstractCompiler(Type type) : _is_initialized(false), _type(type) {} @@ -83,6 +98,10 @@ virtual void print_timers() { ShouldNotReachHere(); } + +#ifdef GRAAL + CompilerStatistics* stats() { return &_stats; } +#endif }; #endif // SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
--- a/src/share/vm/compiler/compileBroker.cpp Wed Jan 30 18:19:01 2013 +0100 +++ b/src/share/vm/compiler/compileBroker.cpp Wed Jan 30 21:36:28 2013 +0100 @@ -2082,9 +2082,17 @@ if (is_osr) { _t_osr_compilation.add(time); _sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#ifdef GRAAL + compiler(task->comp_level())->stats()->_t_osr_compilation.add(time); + compiler(task->comp_level())->stats()->_sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#endif } else { _t_standard_compilation.add(time); _sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#ifdef GRAAL + compiler(task->comp_level())->stats()->_t_standard_compilation.add(time); + compiler(task->comp_level())->stats()->_sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#endif } } @@ -2157,8 +2165,25 @@ tty->print_cr(" Total compiled bytecodes : %6d bytes", tcb); tty->print_cr(" Standard compilation : %6d bytes", CompileBroker::_sum_standard_bytes_compiled); tty->print_cr(" On stack replacement : %6d bytes", CompileBroker::_sum_osr_bytes_compiled); - int bps = (int)(tcb / CompileBroker::_t_total_compilation.seconds()); + double tcs = CompileBroker::_t_total_compilation.seconds(); + int bps = tcs == 0.0 ? 0 : (int)(tcb / tcs); tty->print_cr(" Average compilation speed: %6d bytes/s", bps); +#ifdef GRAAL + for (unsigned int i = 0; i < sizeof(_compilers) / sizeof(AbstractCompiler*); i++) { + AbstractCompiler* comp = _compilers[i]; + if (comp != NULL) { + CompilerStatistics* stats = comp->stats(); + int bytecodes = stats->_sum_osr_bytes_compiled + stats->_sum_standard_bytes_compiled; + if (bytecodes != 0) { + double seconds = stats->_t_osr_compilation.seconds() + stats->_t_standard_compilation.seconds(); + int bps = seconds == 0.0 ? 0 : (int) (bytecodes / seconds); + tty->print_cr(" %7s compilation speed: %6d bytes/s {standard: %6.3f s, %6d bytes; osr: %6.3f s, %6d bytes}", + comp->name(), bps, stats->_t_standard_compilation.seconds(), stats->_sum_standard_bytes_compiled, + stats->_t_osr_compilation.seconds(), stats->_sum_osr_bytes_compiled); + } + } + } +#endif tty->cr(); tty->print_cr(" nmethod code size : %6d bytes", CompileBroker::_sum_nmethod_code_size); tty->print_cr(" nmethod total size : %6d bytes", CompileBroker::_sum_nmethod_size);
--- a/src/share/vm/graal/graalCompiler.hpp Wed Jan 30 18:19:01 2013 +0100 +++ b/src/share/vm/graal/graalCompiler.hpp Wed Jan 30 21:36:28 2013 +0100 @@ -46,7 +46,7 @@ static GraalCompiler* instance() { return _instance; } - virtual const char* name() { return "G"; } + virtual const char* name() { return "Graal"; } virtual bool supports_native() { return true; } virtual bool supports_osr () { return true; }