src/share/vm/opto/c2compiler.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8132457 Cdiff src/share/vm/opto/c2compiler.cpp
src/share/vm/opto/c2compiler.cpp
Print this page
*** 155,172 ****
void C2Compiler::print_timers() {
Compile::print_timers();
}
- bool C2Compiler::is_intrinsic_available(methodHandle method, methodHandle compilation_context) {
- // Assume a non-virtual dispatch. A virtual dispatch is
- // possible for only a limited set of available intrinsics whereas
- // a non-virtual dispatch is possible for all available intrinsics.
- return is_intrinsic_supported(method, false) &&
- !is_intrinsic_disabled_by_flag(method, compilation_context);
- }
-
bool C2Compiler::is_intrinsic_supported(methodHandle method, bool is_virtual) {
vmIntrinsics::ID id = method->intrinsic_id();
assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
if (id < vmIntrinsics::FIRST_ID || id >= vmIntrinsics::LAST_COMPILER_INLINE) {
--- 155,164 ----
*** 434,514 ****
return false;
}
return true;
}
- bool C2Compiler::is_intrinsic_disabled_by_flag(methodHandle method, methodHandle compilation_context) {
- vmIntrinsics::ID id = method->intrinsic_id();
- assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
-
- if (vmIntrinsics::is_disabled_by_flags(method->intrinsic_id())) {
- return true;
- }
-
- // Check if the intrinsic corresponding to 'method' has been disabled on
- // the command line by using the DisableIntrinsic flag (either globally
- // or on a per-method level, see src/share/vm/compiler/abstractCompiler.hpp
- // for details).
- // Usually, the compilation context is the caller of the method 'method'.
- // The only case when for a non-recursive method 'method' the compilation context
- // is not the caller of the 'method' (but it is the method itself) is
- // java.lang.ref.Referene::get.
- // For java.lang.ref.Reference::get, the intrinsic version is used
- // instead of the C2-compiled version so that the value in the referent
- // field can be registered by the G1 pre-barrier code. The intrinsified
- // version of Reference::get also adds a memory barrier to prevent
- // commoning reads from the referent field across safepoint since GC
- // can change the referent field's value. See Compile::Compile()
- // in src/share/vm/opto/compile.cpp for more details.
- ccstr disable_intr = NULL;
- if ((DisableIntrinsic[0] != '\0' && strstr(DisableIntrinsic, vmIntrinsics::name_at(id)) != NULL) ||
- (!compilation_context.is_null() &&
- CompilerOracle::has_option_value(compilation_context, "DisableIntrinsic", disable_intr) &&
- strstr(disable_intr, vmIntrinsics::name_at(id)) != NULL)
- ) {
- return true;
- }
-
- // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in
- // the following switch statement.
- if (!InlineNatives) {
- switch (id) {
- case vmIntrinsics::_indexOf:
- case vmIntrinsics::_compareTo:
- case vmIntrinsics::_equals:
- case vmIntrinsics::_equalsC:
- case vmIntrinsics::_getAndAddInt:
- case vmIntrinsics::_getAndAddLong:
- case vmIntrinsics::_getAndSetInt:
- case vmIntrinsics::_getAndSetLong:
- case vmIntrinsics::_getAndSetObject:
- case vmIntrinsics::_loadFence:
- case vmIntrinsics::_storeFence:
- case vmIntrinsics::_fullFence:
- case vmIntrinsics::_Reference_get:
- break;
- default:
- return true;
- }
- }
-
- if (!InlineUnsafeOps) {
- switch (id) {
- case vmIntrinsics::_loadFence:
- case vmIntrinsics::_storeFence:
- case vmIntrinsics::_fullFence:
- case vmIntrinsics::_compareAndSwapObject:
- case vmIntrinsics::_compareAndSwapLong:
- case vmIntrinsics::_compareAndSwapInt:
- return true;
- default:
- return false;
- }
- }
-
- return false;
- }
-
int C2Compiler::initial_code_buffer_size() {
assert(SegmentedCodeCache, "Should be only used with a segmented code cache");
return Compile::MAX_inst_size + Compile::MAX_locs_size + initial_const_capacity;
}
--- 426,434 ----
src/share/vm/opto/c2compiler.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File