Mercurial > hg > graal-compiler
diff src/share/vm/ci/ciEnv.cpp @ 17780:606acabe7b5c
8031320: Use Intel RTM instructions for locks
Summary: Use RTM for inflated locks and stack locks.
Reviewed-by: iveresov, twisti, roland, dcubed
author | kvn |
---|---|
date | Thu, 20 Mar 2014 17:49:27 -0700 |
parents | 849eb7bfceac |
children | 18f752639eb2 |
line wrap: on
line diff
--- a/src/share/vm/ci/ciEnv.cpp Sat Mar 22 00:26:48 2014 +0400 +++ b/src/share/vm/ci/ciEnv.cpp Thu Mar 20 17:49:27 2014 -0700 @@ -926,7 +926,8 @@ AbstractCompiler* compiler, int comp_level, bool has_unsafe_access, - bool has_wide_vectors) { + bool has_wide_vectors, + RTMState rtm_state) { VM_ENTRY_MARK; nmethod* nm = NULL; { @@ -973,6 +974,15 @@ methodHandle method(THREAD, target->get_Method()); +#if INCLUDE_RTM_OPT + if (!failing() && (rtm_state != NoRTM) && + (method()->method_data() != NULL) && + (method()->method_data()->rtm_state() != rtm_state)) { + // Preemptive decompile if rtm state was changed. + record_failure("RTM state change invalidated rtm code"); + } +#endif + if (failing()) { // While not a true deoptimization, it is a preemptive decompile. MethodData* mdo = method()->method_data(); @@ -999,7 +1009,9 @@ frame_words, oop_map_set, handler_table, inc_table, compiler, comp_level); - +#if INCLUDE_RTM_OPT + nm->set_rtm_state(rtm_state); +#endif // Free codeBlobs code_buffer->free_blob();