--- a/hotspot/src/share/vm/ci/ciEnv.cpp Wed Mar 19 11:37:58 2014 -0700
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp Thu Mar 20 17:49:27 2014 -0700
@@ -961,7 +961,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;
{
@@ -1002,6 +1003,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();
@@ -1028,7 +1038,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();