Mercurial > hg > graal-compiler
comparison src/share/vm/opto/compile.hpp @ 10405:f2110083203d
8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author | sla |
---|---|
date | Mon, 10 Jun 2013 11:30:51 +0200 |
parents | 6f3fd5150b67 |
children | edb5ab0f3fe5 |
comparison
equal
deleted
inserted
replaced
10404:d0add7016434 | 10405:f2110083203d |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
34 #include "libadt/dict.hpp" | 34 #include "libadt/dict.hpp" |
35 #include "libadt/port.hpp" | 35 #include "libadt/port.hpp" |
36 #include "libadt/vectset.hpp" | 36 #include "libadt/vectset.hpp" |
37 #include "memory/resourceArea.hpp" | 37 #include "memory/resourceArea.hpp" |
38 #include "opto/idealGraphPrinter.hpp" | 38 #include "opto/idealGraphPrinter.hpp" |
39 #include "opto/phasetype.hpp" | |
39 #include "opto/phase.hpp" | 40 #include "opto/phase.hpp" |
40 #include "opto/regmask.hpp" | 41 #include "opto/regmask.hpp" |
41 #include "runtime/deoptimization.hpp" | 42 #include "runtime/deoptimization.hpp" |
42 #include "runtime/vmThread.hpp" | 43 #include "runtime/vmThread.hpp" |
44 #include "trace/tracing.hpp" | |
43 | 45 |
44 class Block; | 46 class Block; |
45 class Bundle; | 47 class Bundle; |
46 class C2Compiler; | 48 class C2Compiler; |
47 class CallGenerator; | 49 class CallGenerator; |
319 GrowableArray<Node*>* _expensive_nodes; // List of nodes that are expensive to compute and that we'd better not let the GVN freely common | 321 GrowableArray<Node*>* _expensive_nodes; // List of nodes that are expensive to compute and that we'd better not let the GVN freely common |
320 ConnectionGraph* _congraph; | 322 ConnectionGraph* _congraph; |
321 #ifndef PRODUCT | 323 #ifndef PRODUCT |
322 IdealGraphPrinter* _printer; | 324 IdealGraphPrinter* _printer; |
323 #endif | 325 #endif |
326 | |
324 | 327 |
325 // Node management | 328 // Node management |
326 uint _unique; // Counter for unique Node indices | 329 uint _unique; // Counter for unique Node indices |
327 VectorSet _dead_node_list; // Set of dead nodes | 330 VectorSet _dead_node_list; // Set of dead nodes |
328 uint _dead_node_count; // Number of dead nodes; VectorSet::Size() is O(N). | 331 uint _dead_node_count; // Number of dead nodes; VectorSet::Size() is O(N). |
571 | 574 |
572 // JSR 292 | 575 // JSR 292 |
573 bool has_method_handle_invokes() const { return _has_method_handle_invokes; } | 576 bool has_method_handle_invokes() const { return _has_method_handle_invokes; } |
574 void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; } | 577 void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; } |
575 | 578 |
579 jlong _latest_stage_start_counter; | |
580 | |
576 void begin_method() { | 581 void begin_method() { |
577 #ifndef PRODUCT | 582 #ifndef PRODUCT |
578 if (_printer) _printer->begin_method(this); | 583 if (_printer) _printer->begin_method(this); |
579 #endif | 584 #endif |
580 } | 585 C->_latest_stage_start_counter = os::elapsed_counter(); |
581 void print_method(const char * name, int level = 1) { | 586 } |
587 | |
588 void print_method(CompilerPhaseType cpt, int level = 1) { | |
589 EventCompilerPhase event(UNTIMED); | |
590 if (event.should_commit()) { | |
591 event.set_starttime(C->_latest_stage_start_counter); | |
592 event.set_endtime(os::elapsed_counter()); | |
593 event.set_phase((u1) cpt); | |
594 event.set_compileID(C->_compile_id); | |
595 event.set_phaseLevel(level); | |
596 event.commit(); | |
597 } | |
598 | |
599 | |
582 #ifndef PRODUCT | 600 #ifndef PRODUCT |
583 if (_printer) _printer->print_method(this, name, level); | 601 if (_printer) _printer->print_method(this, CompilerPhaseTypeHelper::to_string(cpt), level); |
584 #endif | 602 #endif |
585 } | 603 C->_latest_stage_start_counter = os::elapsed_counter(); |
586 void end_method() { | 604 } |
605 | |
606 void end_method(int level = 1) { | |
607 EventCompilerPhase event(UNTIMED); | |
608 if (event.should_commit()) { | |
609 event.set_starttime(C->_latest_stage_start_counter); | |
610 event.set_endtime(os::elapsed_counter()); | |
611 event.set_phase((u1) PHASE_END); | |
612 event.set_compileID(C->_compile_id); | |
613 event.set_phaseLevel(level); | |
614 event.commit(); | |
615 } | |
587 #ifndef PRODUCT | 616 #ifndef PRODUCT |
588 if (_printer) _printer->end_method(); | 617 if (_printer) _printer->end_method(); |
589 #endif | 618 #endif |
590 } | 619 } |
591 | 620 |