src/share/vm/opto/phase.hpp

Wed, 22 Jan 2014 17:42:23 -0800

author
kvn
date
Wed, 22 Jan 2014 17:42:23 -0800
changeset 6503
a9becfeecd1b
parent 6478
044b28168e20
parent 6198
55fb97c4c58d
child 6876
710a3c8b516e
child 7564
9df0d8f65fea
permissions
-rw-r--r--

Merge

     1 /*
     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.
     4  *
     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
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    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  */
    25 #ifndef SHARE_VM_OPTO_PHASE_HPP
    26 #define SHARE_VM_OPTO_PHASE_HPP
    28 #include "libadt/port.hpp"
    29 #include "runtime/timer.hpp"
    31 class Compile;
    33 //------------------------------Phase------------------------------------------
    34 // Most optimizations are done in Phases.  Creating a phase does any long
    35 // running analysis required, and caches the analysis in internal data
    36 // structures.  Later the analysis is queried using transform() calls to
    37 // guide transforming the program.  When the Phase is deleted, so is any
    38 // cached analysis info.  This basic Phase class mostly contains timing and
    39 // memory management code.
    40 class Phase : public StackObj {
    41 public:
    42   enum PhaseNumber {
    43     Compiler,                   // Top-level compiler phase
    44     Parser,                     // Parse bytecodes
    45     Remove_Useless,             // Remove useless nodes
    46     Optimistic,                 // Optimistic analysis phase
    47     GVN,                        // Pessimistic global value numbering phase
    48     Ins_Select,                 // Instruction selection phase
    49     CFG,                        // Build a CFG
    50     BlockLayout,                // Linear ordering of blocks
    51     Register_Allocation,        // Register allocation, duh
    52     LIVE,                       // Dragon-book LIVE range problem
    53     StringOpts,                 // StringBuilder related optimizations
    54     Interference_Graph,         // Building the IFG
    55     Coalesce,                   // Coalescing copies
    56     Ideal_Loop,                 // Find idealized trip-counted loops
    57     Macro_Expand,               // Expand macro nodes
    58     Peephole,                   // Apply peephole optimizations
    59     last_phase
    60   };
    61 protected:
    62   enum PhaseNumber _pnum;       // Phase number (for stat gathering)
    64 #ifndef PRODUCT
    65   static int _total_bytes_compiled;
    67   // accumulated timers
    68   static elapsedTimer _t_totalCompilation;
    69   static elapsedTimer _t_methodCompilation;
    70   static elapsedTimer _t_stubCompilation;
    71 #endif
    73 // The next timers used for LogCompilation
    74   static elapsedTimer _t_parser;
    75   static elapsedTimer _t_optimizer;
    76 public:
    77   // ConnectionGraph can't be Phase since it is used after EA done.
    78   static elapsedTimer   _t_escapeAnalysis;
    79   static elapsedTimer     _t_connectionGraph;
    80 protected:
    81   static elapsedTimer   _t_idealLoop;
    82   static elapsedTimer   _t_ccp;
    83   static elapsedTimer _t_matcher;
    84   static elapsedTimer _t_registerAllocation;
    85   static elapsedTimer _t_output;
    87 #ifndef PRODUCT
    88   static elapsedTimer _t_graphReshaping;
    89   static elapsedTimer _t_scheduler;
    90   static elapsedTimer _t_blockOrdering;
    91   static elapsedTimer _t_macroEliminate;
    92   static elapsedTimer _t_macroExpand;
    93   static elapsedTimer _t_peephole;
    94   static elapsedTimer _t_postalloc_expand;
    95   static elapsedTimer _t_codeGeneration;
    96   static elapsedTimer _t_registerMethod;
    97   static elapsedTimer _t_temporaryTimer1;
    98   static elapsedTimer _t_temporaryTimer2;
    99   static elapsedTimer _t_idealLoopVerify;
   101 // Subtimers for _t_optimizer
   102   static elapsedTimer   _t_iterGVN;
   103   static elapsedTimer   _t_iterGVN2;
   104   static elapsedTimer   _t_incrInline;
   106 // Subtimers for _t_registerAllocation
   107   static elapsedTimer   _t_ctorChaitin;
   108   static elapsedTimer   _t_buildIFGphysical;
   109   static elapsedTimer   _t_computeLive;
   110   static elapsedTimer   _t_regAllocSplit;
   111   static elapsedTimer   _t_postAllocCopyRemoval;
   112   static elapsedTimer   _t_fixupSpills;
   114 // Subtimers for _t_output
   115   static elapsedTimer   _t_instrSched;
   116   static elapsedTimer   _t_buildOopMaps;
   117 #endif
   118 public:
   119   Compile * C;
   120   Phase( PhaseNumber pnum );
   121 #ifndef PRODUCT
   122   static void print_timers();
   123 #endif
   124 };
   126 #endif // SHARE_VM_OPTO_PHASE_HPP

mercurial