49 };
50
51 private:
52 Type _type;
53
54 public:
55 AbstractCompiler(Type type) : _type(type), _compiler_state(uninitialized), _num_compiler_threads(0) {}
56
57 // This function determines the compiler thread that will perform the
58 // shutdown of the corresponding compiler runtime.
59 bool should_perform_shutdown();
60
61 // Name of this compiler
62 virtual const char* name() = 0;
63
64 // Missing feature tests
65 virtual bool supports_native() { return true; }
66 virtual bool supports_osr () { return true; }
67 virtual bool can_compile_method(methodHandle method) { return true; }
68
69 // Compiler type queries.
70 bool is_c1() { return _type == c1; }
71 bool is_c2() { return _type == c2; }
72 bool is_shark() { return _type == shark; }
73
74 // Customization
75 virtual void initialize () = 0;
76
77 void set_num_compiler_threads(int num) { _num_compiler_threads = num; }
78 int num_compiler_threads() { return _num_compiler_threads; }
79
80 // Get/set state of compiler objects
81 bool is_initialized() { return _compiler_state == initialized; }
82 bool is_failed () { return _compiler_state == failed;}
83 void set_state (int state);
84 void set_shut_down () { set_state(shut_down); }
85 // Compilation entry point for methods
86 virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
87 ShouldNotReachHere();
88 }
|
49 };
50
51 private:
52 Type _type;
53
54 public:
55 AbstractCompiler(Type type) : _type(type), _compiler_state(uninitialized), _num_compiler_threads(0) {}
56
57 // This function determines the compiler thread that will perform the
58 // shutdown of the corresponding compiler runtime.
59 bool should_perform_shutdown();
60
61 // Name of this compiler
62 virtual const char* name() = 0;
63
64 // Missing feature tests
65 virtual bool supports_native() { return true; }
66 virtual bool supports_osr () { return true; }
67 virtual bool can_compile_method(methodHandle method) { return true; }
68
69 // Determine if the current compiler provides an intrinsic
70 // for method 'method'. An intrinsic is available if:
71 // - the intrinsic is enabled (by using the appropriate command-line flag) and
72 // - the platform on which the VM is running provides the instructions necessary
73 // for the compiler to generate the intrinsic code.
74 //
75 // An intrinsic can also be disabled using the DisableIntrinsic command-line
76 // flag. There are three ways to disable an intrinsic using the DisableIntrinsic
77 // flag:
78 //
79 // (1) -XX:DisableIntrinsic=_hashCode,_getClass
80 // Disables intrinsification of _hashCode and _getClass globally
81 // (i.e., the intrinsified version the methods will not be used at all).
82 // (2) -XX:CompileCommand=option,aClass::aMethod,DisableIntrinsic,_hashCode
83 // Disables intrinsification of _hashCode when it is called from
84 // aClass::aMethod (but not for any other call site of _hashCode)
85 // (3) -XX:CompileCommand=option,java.lang.ref.Reference::get,DisableIntrinsic,_Reference_get
86 // Some methods are not compiled by C2. Instead, the C2 compiler
87 // returns directly the intrinsified version of these methods.
88 // The command above forces C2 to compile _Reference_get, but
89 // allows using the intrinsified version of _Reference_get at all
90 // other call sites.
91 //
92 // From the above modes, (1) disable intrinsics globally, (2) and (3)
93 // disable intrinsics on a per-method basis. In cases (2) and (3) the
94 // compilation context is aClass::aMethod and java.lang.ref.Reference::get,
95 // respectively.
96 virtual bool is_intrinsic_available_for(methodHandle method, methodHandle compilation_context) {
97 return false;
98 }
99
100 // Use the version of 'is_intrinsic_available_for' from below if usage of
101 // per-method DisableIntrinsic flag is not expected (or not relevant). The
102 // method below ignores all per-method usages of the DisableIntrinsic flag.
103 virtual bool is_intrinsic_available_for(methodHandle method) {
104 return false;
105 }
106
107 // Compiler type queries.
108 bool is_c1() { return _type == c1; }
109 bool is_c2() { return _type == c2; }
110 bool is_shark() { return _type == shark; }
111
112 // Customization
113 virtual void initialize () = 0;
114
115 void set_num_compiler_threads(int num) { _num_compiler_threads = num; }
116 int num_compiler_threads() { return _num_compiler_threads; }
117
118 // Get/set state of compiler objects
119 bool is_initialized() { return _compiler_state == initialized; }
120 bool is_failed () { return _compiler_state == failed;}
121 void set_state (int state);
122 void set_shut_down () { set_state(shut_down); }
123 // Compilation entry point for methods
124 virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
125 ShouldNotReachHere();
126 }
|