Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/compiler/abstractCompiler.hpp
32285 views
1
/*
2
* Copyright (c) 1999, 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
*/
24
25
#ifndef SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
26
#define SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
27
28
#include "ci/compilerInterface.hpp"
29
30
class AbstractCompiler : public CHeapObj<mtCompiler> {
31
private:
32
volatile int _num_compiler_threads;
33
34
protected:
35
volatile int _compiler_state;
36
// Used for tracking global state of compiler runtime initialization
37
enum { uninitialized, initializing, initialized, failed, shut_down };
38
39
// This method returns true for the first compiler thread that reaches that methods.
40
// This thread will initialize the compiler runtime.
41
bool should_perform_init();
42
43
public:
44
AbstractCompiler() : _compiler_state(uninitialized), _num_compiler_threads(0) {}
45
46
// This function determines the compiler thread that will perform the
47
// shutdown of the corresponding compiler runtime.
48
bool should_perform_shutdown();
49
50
// Name of this compiler
51
virtual const char* name() = 0;
52
53
// Missing feature tests
54
virtual bool supports_native() { return true; }
55
virtual bool supports_osr () { return true; }
56
virtual bool can_compile_method(methodHandle method) { return true; }
57
#if defined(TIERED) || ( !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK))
58
virtual bool is_c1 () { return false; }
59
virtual bool is_c2 () { return false; }
60
virtual bool is_shark() { return false; }
61
#else
62
#ifdef COMPILER1
63
bool is_c1 () { return true; }
64
bool is_c2 () { return false; }
65
bool is_shark() { return false; }
66
#endif // COMPILER1
67
#ifdef COMPILER2
68
bool is_c1 () { return false; }
69
bool is_c2 () { return true; }
70
bool is_shark() { return false; }
71
#endif // COMPILER2
72
#ifdef SHARK
73
bool is_c1 () { return false; }
74
bool is_c2 () { return false; }
75
bool is_shark() { return true; }
76
#endif // SHARK
77
#endif // TIERED
78
79
// Customization
80
virtual void initialize () = 0;
81
82
void set_num_compiler_threads(int num) { _num_compiler_threads = num; }
83
int num_compiler_threads() { return _num_compiler_threads; }
84
85
// Get/set state of compiler objects
86
bool is_initialized() { return _compiler_state == initialized; }
87
bool is_failed () { return _compiler_state == failed;}
88
void set_state (int state);
89
void set_shut_down () { set_state(shut_down); }
90
// Compilation entry point for methods
91
virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
92
ShouldNotReachHere();
93
}
94
95
96
// Print compilation timers and statistics
97
virtual void print_timers() {
98
ShouldNotReachHere();
99
}
100
};
101
102
#endif // SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
103
104