hotspot/src/share/vm/opto/phase.hpp
changeset 1 489c9b5090e2
child 1498 346bf226078e
equal deleted inserted replaced
0:fd16c54261b3 1:489c9b5090e2
       
     1 /*
       
     2  * Copyright 1997-2005 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       
    20  * CA 95054 USA or visit www.sun.com if you need additional information or
       
    21  * have any questions.
       
    22  *
       
    23  */
       
    24 
       
    25 class Compile;
       
    26 
       
    27 //------------------------------Phase------------------------------------------
       
    28 // Most optimizations are done in Phases.  Creating a phase does any long
       
    29 // running analysis required, and caches the analysis in internal data
       
    30 // structures.  Later the analysis is queried using transform() calls to
       
    31 // guide transforming the program.  When the Phase is deleted, so is any
       
    32 // cached analysis info.  This basic Phase class mostly contains timing and
       
    33 // memory management code.
       
    34 class Phase : public StackObj {
       
    35 public:
       
    36   enum PhaseNumber {
       
    37     Compiler,                   // Top-level compiler phase
       
    38     Parser,                     // Parse bytecodes
       
    39     Remove_Useless,             // Remove useless nodes
       
    40     Optimistic,                 // Optimistic analysis phase
       
    41     GVN,                        // Pessimistic global value numbering phase
       
    42     Ins_Select,                 // Instruction selection phase
       
    43     Copy_Elimination,           // Copy Elimination
       
    44     Dead_Code_Elimination,      // DCE and compress Nodes
       
    45     Conditional_Constant,       // Conditional Constant Propagation
       
    46     CFG,                        // Build a CFG
       
    47     DefUse,                     // Build Def->Use chains
       
    48     Register_Allocation,        // Register allocation, duh
       
    49     LIVE,                       // Dragon-book LIVE range problem
       
    50     Interference_Graph,         // Building the IFG
       
    51     Coalesce,                   // Coalescing copies
       
    52     Conditional_CProp,          // Conditional Constant Propagation
       
    53     Ideal_Loop,                 // Find idealized trip-counted loops
       
    54     Macro_Expand,               // Expand macro nodes
       
    55     Peephole,                   // Apply peephole optimizations
       
    56     last_phase
       
    57   };
       
    58 protected:
       
    59   enum PhaseNumber _pnum;       // Phase number (for stat gathering)
       
    60 
       
    61 #ifndef PRODUCT
       
    62   static int _total_bytes_compiled;
       
    63 
       
    64   // accumulated timers
       
    65   static elapsedTimer _t_totalCompilation;
       
    66   static elapsedTimer _t_methodCompilation;
       
    67   static elapsedTimer _t_stubCompilation;
       
    68 #endif
       
    69 
       
    70 // The next timers used for LogCompilation
       
    71   static elapsedTimer _t_parser;
       
    72   static elapsedTimer _t_escapeAnalysis;
       
    73   static elapsedTimer _t_optimizer;
       
    74   static elapsedTimer   _t_idealLoop;
       
    75   static elapsedTimer   _t_ccp;
       
    76   static elapsedTimer _t_matcher;
       
    77   static elapsedTimer _t_registerAllocation;
       
    78   static elapsedTimer _t_output;
       
    79 
       
    80 #ifndef PRODUCT
       
    81   static elapsedTimer _t_graphReshaping;
       
    82   static elapsedTimer _t_scheduler;
       
    83   static elapsedTimer _t_removeEmptyBlocks;
       
    84   static elapsedTimer _t_macroExpand;
       
    85   static elapsedTimer _t_peephole;
       
    86   static elapsedTimer _t_codeGeneration;
       
    87   static elapsedTimer _t_registerMethod;
       
    88   static elapsedTimer _t_temporaryTimer1;
       
    89   static elapsedTimer _t_temporaryTimer2;
       
    90 
       
    91 // Subtimers for _t_optimizer
       
    92   static elapsedTimer   _t_iterGVN;
       
    93   static elapsedTimer   _t_iterGVN2;
       
    94 
       
    95 // Subtimers for _t_registerAllocation
       
    96   static elapsedTimer   _t_ctorChaitin;
       
    97   static elapsedTimer   _t_buildIFGphysical;
       
    98   static elapsedTimer   _t_computeLive;
       
    99   static elapsedTimer   _t_regAllocSplit;
       
   100   static elapsedTimer   _t_postAllocCopyRemoval;
       
   101   static elapsedTimer   _t_fixupSpills;
       
   102 
       
   103 // Subtimers for _t_output
       
   104   static elapsedTimer   _t_instrSched;
       
   105   static elapsedTimer   _t_buildOopMaps;
       
   106 #endif
       
   107 public:
       
   108   Compile * C;
       
   109   Phase( PhaseNumber pnum );
       
   110 #ifndef PRODUCT
       
   111   static void print_timers();
       
   112 #endif
       
   113 };