1 /*
   2  * Copyright (c) 2012, 2019, 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  */
  24 
  25 #ifndef SHARE_OPTO_PHASETYPE_HPP
  26 #define SHARE_OPTO_PHASETYPE_HPP
  27 
  28 enum CompilerPhaseType {
  29   PHASE_BEFORE_STRINGOPTS,
  30   PHASE_AFTER_STRINGOPTS,
  31   PHASE_BEFORE_REMOVEUSELESS,
  32   PHASE_AFTER_PARSING,
  33   PHASE_ITER_GVN1,
  34   PHASE_PHASEIDEAL_BEFORE_EA,
  35   PHASE_ITER_GVN_AFTER_EA,
  36   PHASE_ITER_GVN_AFTER_ELIMINATION,
  37   PHASE_PHASEIDEALLOOP1,
  38   PHASE_PHASEIDEALLOOP2,
  39   PHASE_PHASEIDEALLOOP3,
  40   PHASE_CPP1,
  41   PHASE_ITER_GVN2,
  42   PHASE_PHASEIDEALLOOP_ITERATIONS,
  43   PHASE_OPTIMIZE_FINISHED,
  44   PHASE_GLOBAL_CODE_MOTION,
  45   PHASE_FINAL_CODE,
  46   PHASE_AFTER_EA,
  47   PHASE_BEFORE_CLOOPS,
  48   PHASE_AFTER_CLOOPS,
  49   PHASE_BEFORE_BEAUTIFY_LOOPS,
  50   PHASE_AFTER_BEAUTIFY_LOOPS,
  51   PHASE_BEFORE_MATCHING,
  52   PHASE_MATCHING,
  53   PHASE_INCREMENTAL_INLINE,
  54   PHASE_INCREMENTAL_BOXING_INLINE,
  55   PHASE_CALL_CATCH_CLEANUP,
  56   PHASE_INSERT_BARRIER,
  57   PHASE_MACRO_EXPANSION,
  58   PHASE_BARRIER_EXPANSION,
  59   PHASE_ADD_UNSAFE_BARRIER,
  60   PHASE_END,
  61   PHASE_FAILURE,
  62 
  63   PHASE_NUM_TYPES
  64 };
  65 
  66 class CompilerPhaseTypeHelper {
  67   public:
  68   static const char* to_string(CompilerPhaseType cpt) {
  69     switch (cpt) {
  70       case PHASE_BEFORE_STRINGOPTS:          return "Before StringOpts";
  71       case PHASE_AFTER_STRINGOPTS:           return "After StringOpts";
  72       case PHASE_BEFORE_REMOVEUSELESS:       return "Before RemoveUseless";
  73       case PHASE_AFTER_PARSING:              return "After Parsing";
  74       case PHASE_ITER_GVN1:                  return "Iter GVN 1";
  75       case PHASE_PHASEIDEAL_BEFORE_EA:       return "PhaseIdealLoop before EA";
  76       case PHASE_ITER_GVN_AFTER_EA:          return "Iter GVN after EA";
  77       case PHASE_ITER_GVN_AFTER_ELIMINATION: return "Iter GVN after eliminating allocations and locks";
  78       case PHASE_PHASEIDEALLOOP1:            return "PhaseIdealLoop 1";
  79       case PHASE_PHASEIDEALLOOP2:            return "PhaseIdealLoop 2";
  80       case PHASE_PHASEIDEALLOOP3:            return "PhaseIdealLoop 3";
  81       case PHASE_CPP1:                       return "PhaseCPP 1";
  82       case PHASE_ITER_GVN2:                  return "Iter GVN 2";
  83       case PHASE_PHASEIDEALLOOP_ITERATIONS:  return "PhaseIdealLoop iterations";
  84       case PHASE_OPTIMIZE_FINISHED:          return "Optimize finished";
  85       case PHASE_GLOBAL_CODE_MOTION:         return "Global code motion";
  86       case PHASE_FINAL_CODE:                 return "Final Code";
  87       case PHASE_AFTER_EA:                   return "After Escape Analysis";
  88       case PHASE_BEFORE_CLOOPS:              return "Before CountedLoop";
  89       case PHASE_AFTER_CLOOPS:               return "After CountedLoop";
  90       case PHASE_BEFORE_BEAUTIFY_LOOPS:      return "Before beautify loops";
  91       case PHASE_AFTER_BEAUTIFY_LOOPS:       return "After beautify loops";
  92       case PHASE_BEFORE_MATCHING:            return "Before matching";
  93       case PHASE_MATCHING:                   return "After matching";
  94       case PHASE_INCREMENTAL_INLINE:         return "Incremental Inline";
  95       case PHASE_INCREMENTAL_BOXING_INLINE:  return "Incremental Boxing Inline";
  96       case PHASE_CALL_CATCH_CLEANUP:         return "Call catch cleanup";
  97       case PHASE_INSERT_BARRIER:             return "Insert barrier";
  98       case PHASE_MACRO_EXPANSION:            return "Macro expand";
  99       case PHASE_BARRIER_EXPANSION:          return "Barrier expand";
 100       case PHASE_ADD_UNSAFE_BARRIER:         return "Add barrier to unsafe op";
 101       case PHASE_END:                        return "End";
 102       case PHASE_FAILURE:                    return "Failure";
 103       default:
 104         ShouldNotReachHere();
 105         return NULL;
 106     }
 107   }
 108 };
 109 
 110 #endif // SHARE_OPTO_PHASETYPE_HPP