10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_OPTO_PHASE_HPP
26 #define SHARE_VM_OPTO_PHASE_HPP
27
28 #include "runtime/timer.hpp"
29
30 class Compile;
31
32 //------------------------------Phase------------------------------------------
33 // Most optimizations are done in Phases. Creating a phase does any long
34 // running analysis required, and caches the analysis in internal data
35 // structures. Later the analysis is queried using transform() calls to
36 // guide transforming the program. When the Phase is deleted, so is any
37 // cached analysis info. This basic Phase class mostly contains timing and
38 // memory management code.
39 class Phase : public StackObj {
40 public:
41 enum PhaseNumber {
42 Compiler, // Top-level compiler phase
43 Parser, // Parse bytecodes
44 Remove_Useless, // Remove useless nodes
45 Optimistic, // Optimistic analysis phase
46 GVN, // Pessimistic global value numbering phase
47 Ins_Select, // Instruction selection phase
48 CFG, // Build a CFG
49 BlockLayout, // Linear ordering of blocks
50 Register_Allocation, // Register allocation, duh
97 static elapsedTimer _t_temporaryTimer2;
98 static elapsedTimer _t_idealLoopVerify;
99
100 // Subtimers for _t_optimizer
101 static elapsedTimer _t_iterGVN;
102 static elapsedTimer _t_iterGVN2;
103 static elapsedTimer _t_incrInline;
104
105 // Subtimers for _t_registerAllocation
106 static elapsedTimer _t_ctorChaitin;
107 static elapsedTimer _t_buildIFGphysical;
108 static elapsedTimer _t_computeLive;
109 static elapsedTimer _t_regAllocSplit;
110 static elapsedTimer _t_postAllocCopyRemoval;
111 static elapsedTimer _t_fixupSpills;
112
113 // Subtimers for _t_output
114 static elapsedTimer _t_instrSched;
115 static elapsedTimer _t_buildOopMaps;
116 #endif
117 public:
118 Compile * C;
119 Phase( PhaseNumber pnum );
120 #ifndef PRODUCT
121 static void print_timers();
122 #endif
123 };
124
125 #endif // SHARE_VM_OPTO_PHASE_HPP
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_OPTO_PHASE_HPP
26 #define SHARE_VM_OPTO_PHASE_HPP
27
28 #include "runtime/timer.hpp"
29
30 class MergeMemNode;
31 class IfNode;
32 class PhaseGVN;
33
34 //------------------------------Phase------------------------------------------
35 // Most optimizations are done in Phases. Creating a phase does any long
36 // running analysis required, and caches the analysis in internal data
37 // structures. Later the analysis is queried using transform() calls to
38 // guide transforming the program. When the Phase is deleted, so is any
39 // cached analysis info. This basic Phase class mostly contains timing and
40 // memory management code.
41 class Phase : public StackObj {
42 public:
43 enum PhaseNumber {
44 Compiler, // Top-level compiler phase
45 Parser, // Parse bytecodes
46 Remove_Useless, // Remove useless nodes
47 Optimistic, // Optimistic analysis phase
48 GVN, // Pessimistic global value numbering phase
49 Ins_Select, // Instruction selection phase
50 CFG, // Build a CFG
51 BlockLayout, // Linear ordering of blocks
52 Register_Allocation, // Register allocation, duh
99 static elapsedTimer _t_temporaryTimer2;
100 static elapsedTimer _t_idealLoopVerify;
101
102 // Subtimers for _t_optimizer
103 static elapsedTimer _t_iterGVN;
104 static elapsedTimer _t_iterGVN2;
105 static elapsedTimer _t_incrInline;
106
107 // Subtimers for _t_registerAllocation
108 static elapsedTimer _t_ctorChaitin;
109 static elapsedTimer _t_buildIFGphysical;
110 static elapsedTimer _t_computeLive;
111 static elapsedTimer _t_regAllocSplit;
112 static elapsedTimer _t_postAllocCopyRemoval;
113 static elapsedTimer _t_fixupSpills;
114
115 // Subtimers for _t_output
116 static elapsedTimer _t_instrSched;
117 static elapsedTimer _t_buildOopMaps;
118 #endif
119
120 // Generate a subtyping check. Takes as input the subtype and supertype.
121 // Returns 2 values: sets the default control() to the true path and
122 // returns the false path. Only reads from constant memory taken from the
123 // default memory; does not write anything. It also doesn't take in an
124 // Object; if you wish to check an Object you need to load the Object's
125 // class prior to coming here.
126 // Used in GraphKit and PhaseMacroExpand
127 static Node* gen_subtype_check(Node* subklass, Node* superklass, Node** ctrl, MergeMemNode* mem, PhaseGVN* gvn);
128
129 public:
130 Compile * C;
131 Phase( PhaseNumber pnum );
132
133 #ifndef PRODUCT
134 static void print_timers();
135 #endif
136 };
137
138 #endif // SHARE_VM_OPTO_PHASE_HPP
|