diff --git a/src/hotspot/share/opto/phasetype.cpp b/src/hotspot/share/opto/phasetype.cpp new file mode 100644 index 0000000000000..3e18bd089baf1 --- /dev/null +++ b/src/hotspot/share/opto/phasetype.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "phasetype.hpp" + +const char* const CompilerPhaseTypeHelper::_phase_descriptions[] = { +#define array_of_labels(name, description) description, + COMPILER_PHASES(array_of_labels) +#undef array_of_labels +}; + +const char* const CompilerPhaseTypeHelper::_phase_names[] = { +#define array_of_labels(name, description) #name, + COMPILER_PHASES(array_of_labels) +#undef array_of_labels +}; + +CompilerPhaseType CompilerPhaseTypeHelper::find_phase(const char* str) { + for (int i = 0; i < PHASE_NUM_TYPES; i++) { + if (strcmp(CompilerPhaseTypeHelper::_phase_names[i], str) == 0) { + return (CompilerPhaseType)i; + } + } + return PHASE_NONE; +} diff --git a/src/hotspot/share/opto/phasetype.hpp b/src/hotspot/share/opto/phasetype.hpp index 942850cf89225..5c733c7dc0ab9 100644 --- a/src/hotspot/share/opto/phasetype.hpp +++ b/src/hotspot/share/opto/phasetype.hpp @@ -138,36 +138,21 @@ enum CompilerPhaseType { }; #undef table_entry -static const char* phase_descriptions[] = { -#define array_of_labels(name, description) description, - COMPILER_PHASES(array_of_labels) -#undef array_of_labels -}; - -static const char* phase_names[] = { -#define array_of_labels(name, description) #name, - COMPILER_PHASES(array_of_labels) -#undef array_of_labels -}; - class CompilerPhaseTypeHelper { - public: + private: + static const char* const _phase_descriptions[]; + static const char* const _phase_names[]; + + public: static const char* to_name(CompilerPhaseType cpt) { - return phase_names[cpt]; + return _phase_names[cpt]; } static const char* to_description(CompilerPhaseType cpt) { - return phase_descriptions[cpt]; + return _phase_descriptions[cpt]; } -}; -static CompilerPhaseType find_phase(const char* str) { - for (int i = 0; i < PHASE_NUM_TYPES; i++) { - if (strcmp(phase_names[i], str) == 0) { - return (CompilerPhaseType)i; - } - } - return PHASE_NONE; -} + static CompilerPhaseType find_phase(const char* str); +}; class PhaseNameValidator { private: @@ -183,7 +168,7 @@ class PhaseNameValidator { { for (StringUtils::CommaSeparatedStringIterator iter(option); *iter != nullptr && _valid; ++iter) { - CompilerPhaseType cpt = find_phase(*iter); + CompilerPhaseType cpt = CompilerPhaseTypeHelper::find_phase(*iter); if (PHASE_NONE == cpt) { const size_t len = MIN2(strlen(*iter), 63) + 1; // cap len to a value we know is enough for all phase descriptions _bad = NEW_C_HEAP_ARRAY(char, len, mtCompiler);