changeset 59301:be5d924adffa

8220049: Obsolete ThreadLocalHandshakes Reviewed-by: dholmes, dcubed, mdoerr
author rehn
date Wed, 11 Dec 2019 15:30:07 +0100
parents 99c493a347a1
children a11adaddb8ab
files src/hotspot/cpu/aarch64/globals_aarch64.hpp src/hotspot/cpu/arm/globals_arm.hpp src/hotspot/cpu/ppc/globals_ppc.hpp src/hotspot/cpu/s390/globals_s390.hpp src/hotspot/cpu/sparc/globals_sparc.hpp src/hotspot/cpu/x86/globals_x86.hpp src/hotspot/cpu/zero/globals_zero.hpp src/hotspot/os/aix/safepointMechanism_aix.cpp src/hotspot/share/aot/aotCodeHeap.cpp src/hotspot/share/aot/aotCodeHeap.hpp src/hotspot/share/gc/z/zMark.cpp src/hotspot/share/runtime/arguments.cpp src/hotspot/share/runtime/biasedLocking.cpp src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp src/hotspot/share/runtime/globals.hpp src/hotspot/share/runtime/handshake.cpp src/hotspot/share/runtime/safepoint.cpp src/hotspot/share/runtime/safepointMechanism.cpp src/hotspot/share/runtime/safepointMechanism.hpp src/hotspot/share/runtime/sweeper.cpp src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/MarkProcessor.java src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotSafepointOp.java src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotSafepointOp.java src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc.test/src/org/graalvm/compiler/hotspot/sparc/test/SPARCAllocatorTest.java src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotSafepointOp.java src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java
diffstat 28 files changed, 38 insertions(+), 135 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/cpu/aarch64/globals_aarch64.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/aarch64/globals_aarch64.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -71,8 +71,6 @@
 // Clear short arrays bigger than one word in an arch-specific way
 define_pd_global(intx, InitArrayShortSize, BytesPerLong);
 
-define_pd_global(bool, ThreadLocalHandshakes, true);
-
 #if defined(COMPILER1) || defined(COMPILER2)
 define_pd_global(intx, InlineSmallCode,          1000);
 #endif
--- a/src/hotspot/cpu/arm/globals_arm.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/arm/globals_arm.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -70,8 +70,6 @@
 
 define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
 
-define_pd_global(bool, ThreadLocalHandshakes, false);
-
 #define ARCH_FLAGS(develop, \
                    product, \
                    diagnostic, \
--- a/src/hotspot/cpu/ppc/globals_ppc.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/ppc/globals_ppc.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -74,8 +74,6 @@
 // 2x unrolled loop is shorter with more than 9 HeapWords.
 define_pd_global(intx, InitArrayShortSize, 9*BytesPerLong);
 
-define_pd_global(bool, ThreadLocalHandshakes, true);
-
 // Platform dependent flag handling: flags only defined on this platform.
 #define ARCH_FLAGS(develop,      \
                    product,      \
--- a/src/hotspot/cpu/s390/globals_s390.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/s390/globals_s390.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -76,8 +76,6 @@
 // 8146801 (Short Array Allocation): No performance work done here yet.
 define_pd_global(intx, InitArrayShortSize, 1*BytesPerLong);
 
-define_pd_global(bool, ThreadLocalHandshakes, true);
-
 #define ARCH_FLAGS(develop,      \
                    product,      \
                    diagnostic,   \
--- a/src/hotspot/cpu/sparc/globals_sparc.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/sparc/globals_sparc.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -80,8 +80,6 @@
 
 define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
 
-define_pd_global(bool, ThreadLocalHandshakes, true);
-
 #define ARCH_FLAGS(develop, \
                    product, \
                    diagnostic, \
--- a/src/hotspot/cpu/x86/globals_x86.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/x86/globals_x86.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -89,8 +89,6 @@
 
 define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
 
-define_pd_global(bool, ThreadLocalHandshakes, true);
-
 #define ARCH_FLAGS(develop, \
                    product, \
                    diagnostic, \
--- a/src/hotspot/cpu/zero/globals_zero.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/cpu/zero/globals_zero.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -73,8 +73,6 @@
 // No performance work done here yet.
 define_pd_global(bool, CompactStrings, false);
 
-define_pd_global(bool, ThreadLocalHandshakes, true);
-
 #define ARCH_FLAGS(develop, \
                    product, \
                    diagnostic, \
--- a/src/hotspot/os/aix/safepointMechanism_aix.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/os/aix/safepointMechanism_aix.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -32,14 +32,14 @@
 
 void SafepointMechanism::pd_initialize() {
   // No special code needed if we can use SIGTRAP
-  if (ThreadLocalHandshakes && USE_POLL_BIT_ONLY) {
+  if (USE_POLL_BIT_ONLY) {
     default_initialize();
     return;
   }
 
   // Allocate one protected page
   char* map_address = (char*)MAP_FAILED;
-  const size_t map_size = ThreadLocalHandshakes ? 2 * os::vm_page_size() : os::vm_page_size();
+  const size_t map_size = 2 * os::vm_page_size();
   const int prot  = PROT_READ;
   const int flags = MAP_PRIVATE | MAP_ANONYMOUS;
 
@@ -99,13 +99,10 @@
   // Register polling page with NMT.
   MemTracker::record_virtual_memory_reserve_and_commit(map_address, map_size, CALLER_PC, mtSafepoint);
 
-  // Use same page for ThreadLocalHandshakes without SIGTRAP
-  if (ThreadLocalHandshakes) {
-    set_uses_thread_local_poll();
-    os::make_polling_page_unreadable();
-    intptr_t bad_page_val  = reinterpret_cast<intptr_t>(map_address),
-             good_page_val = bad_page_val + os::vm_page_size();
-    _poll_armed_value    = reinterpret_cast<void*>(bad_page_val  + poll_bit());
-    _poll_disarmed_value = reinterpret_cast<void*>(good_page_val);
-  }
+  // Use same page for thread local handshakes without SIGTRAP
+  os::make_polling_page_unreadable();
+  intptr_t bad_page_val  = reinterpret_cast<intptr_t>(map_address),
+           good_page_val = bad_page_val + os::vm_page_size();
+  _poll_armed_value    = reinterpret_cast<void*>(bad_page_val  + poll_bit());
+  _poll_disarmed_value = reinterpret_cast<void*>(good_page_val);
 }
--- a/src/hotspot/share/aot/aotCodeHeap.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/aot/aotCodeHeap.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -185,7 +185,6 @@
   verify_flag(_config->_compactFields, CompactFields, "CompactFields");
   verify_flag(_config->_enableContended, EnableContended, "EnableContended");
   verify_flag(_config->_restrictContended, RestrictContended, "RestrictContended");
-  verify_flag(_config->_threadLocalHandshakes, ThreadLocalHandshakes, "ThreadLocalHandshakes");
 
   if (!TieredCompilation && _config->_tieredAOT) {
     handle_config_error("Shared file %s error: Expected to run with tiered compilation on", _name);
--- a/src/hotspot/share/aot/aotCodeHeap.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/aot/aotCodeHeap.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -92,7 +92,7 @@
 } AOTHeader;
 
 typedef struct {
-  enum { CONFIG_SIZE = 8 * jintSize + 11 };
+  enum { CONFIG_SIZE = 8 * jintSize + 10 };
   // 8 int values
   int _config_size;
   int _narrowOopShift;
@@ -113,7 +113,6 @@
   bool _enableContended;
   bool _restrictContended;
   bool _omitAssertions;
-  bool _threadLocalHandshakes;
 } AOTConfiguration;
 
 class AOTLib : public CHeapObj<mtCode> {
--- a/src/hotspot/share/gc/z/zMark.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/gc/z/zMark.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -45,6 +45,7 @@
 #include "runtime/atomic.hpp"
 #include "runtime/handshake.hpp"
 #include "runtime/prefetch.inline.hpp"
+#include "runtime/safepointMechanism.hpp"
 #include "runtime/thread.hpp"
 #include "utilities/align.hpp"
 #include "utilities/globalDefinitions.hpp"
@@ -454,7 +455,7 @@
 
 bool ZMark::try_flush(volatile size_t* nflush) {
   // Only flush if handshakes are enabled
-  if (!ThreadLocalHandshakes) {
+  if (!SafepointMechanism::uses_thread_local_poll()) {
     return false;
   }
 
--- a/src/hotspot/share/runtime/arguments.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/arguments.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -4205,20 +4205,6 @@
   }
 #endif
 
-#if defined(IA32)
-  // Only server compiler can optimize safepoints well enough.
-  if (!is_server_compilation_mode_vm()) {
-    FLAG_SET_ERGO_IF_DEFAULT(ThreadLocalHandshakes, false);
-  }
-#endif
-
-  // ThreadLocalHandshakesConstraintFunc handles the constraints.
-  if (FLAG_IS_DEFAULT(ThreadLocalHandshakes) || !SafepointMechanism::supports_thread_local_poll()) {
-    log_debug(ergo)("ThreadLocalHandshakes %s", ThreadLocalHandshakes ? "enabled." : "disabled.");
-  } else {
-    log_info(ergo)("ThreadLocalHandshakes %s", ThreadLocalHandshakes ? "enabled." : "disabled.");
-  }
-
   return JNI_OK;
 }
 
--- a/src/hotspot/share/runtime/biasedLocking.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/biasedLocking.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -36,6 +36,7 @@
 #include "runtime/biasedLocking.hpp"
 #include "runtime/handles.inline.hpp"
 #include "runtime/handshake.hpp"
+#include "runtime/safepointMechanism.hpp"
 #include "runtime/task.hpp"
 #include "runtime/threadSMR.hpp"
 #include "runtime/vframe.hpp"
@@ -665,8 +666,8 @@
 
 // Caller should have instantiated a ResourceMark object before calling this method
 void BiasedLocking::walk_stack_and_revoke(oop obj, JavaThread* biased_locker) {
-  assert(!SafepointSynchronize::is_at_safepoint() || !ThreadLocalHandshakes,
-         "if ThreadLocalHandshakes is enabled this should always be executed outside safepoints");
+  assert(!SafepointSynchronize::is_at_safepoint() || !SafepointMechanism::uses_thread_local_poll(),
+         "if SafepointMechanism::uses_thread_local_poll() is enabled this should always be executed outside safepoints");
   assert(Thread::current() == biased_locker || Thread::current()->is_VM_thread(), "wrong thread");
 
   markWord mark = obj->mark();
--- a/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -130,13 +130,3 @@
     return JVMFlag::SUCCESS;
   }
 }
-
-JVMFlag::Error ThreadLocalHandshakesConstraintFunc(bool value, bool verbose) {
-  if (value) {
-    if (!SafepointMechanism::supports_thread_local_poll()) {
-      JVMFlag::printError(verbose, "ThreadLocalHandshakes not yet supported on this platform\n");
-      return JVMFlag::VIOLATES_CONSTRAINT;
-    }
-  }
-  return JVMFlag::SUCCESS;
-}
--- a/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -44,7 +44,4 @@
 
 JVMFlag::Error PerfDataSamplingIntervalFunc(intx value, bool verbose);
 
-JVMFlag::Error ThreadLocalHandshakesConstraintFunc(bool value, bool verbose);
-
-
 #endif // SHARE_RUNTIME_FLAGS_JVMFLAGCONSTRAINTSRUNTIME_HPP
--- a/src/hotspot/share/runtime/globals.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/globals.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -163,10 +163,6 @@
   develop(bool, CleanChunkPoolAsync, true,                                  \
           "Clean the chunk pool asynchronously")                            \
                                                                             \
-  product_pd(bool, ThreadLocalHandshakes,                                   \
-          "Use thread-local polls instead of global poll for safepoints.")  \
-          constraint(ThreadLocalHandshakesConstraintFunc,AfterErgo)         \
-                                                                            \
   diagnostic(uint, HandshakeTimeout, 0,                                     \
           "If nonzero set a timeout in milliseconds for handshakes")        \
                                                                             \
--- a/src/hotspot/share/runtime/handshake.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/handshake.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -282,7 +282,7 @@
 }
 
 void Handshake::execute(HandshakeClosure* thread_cl) {
-  if (ThreadLocalHandshakes) {
+  if (SafepointMechanism::uses_thread_local_poll()) {
     HandshakeThreadsOperation cto(thread_cl);
     VM_HandshakeAllThreads handshake(&cto);
     VMThread::execute(&handshake);
@@ -293,7 +293,7 @@
 }
 
 bool Handshake::execute(HandshakeClosure* thread_cl, JavaThread* target) {
-  if (ThreadLocalHandshakes) {
+  if (SafepointMechanism::uses_thread_local_poll()) {
     HandshakeThreadsOperation cto(thread_cl);
     VM_HandshakeOneThread handshake(&cto, target);
     VMThread::execute(&handshake);
--- a/src/hotspot/share/runtime/safepoint.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/safepoint.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -881,7 +881,7 @@
 void SafepointSynchronize::handle_polling_page_exception(JavaThread *thread) {
   assert(thread->is_Java_thread(), "polling reference encountered by VM thread");
   assert(thread->thread_state() == _thread_in_Java, "should come from Java code");
-  if (!ThreadLocalHandshakes) {
+  if (!SafepointMechanism::uses_thread_local_poll()) {
     assert(SafepointSynchronize::is_synchronizing(), "polling encountered outside safepoint synchronization");
   }
 
--- a/src/hotspot/share/runtime/safepointMechanism.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/safepointMechanism.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -31,13 +31,11 @@
 #include "services/memTracker.hpp"
 #include "utilities/globalDefinitions.hpp"
 
-SafepointMechanism::PollingType SafepointMechanism::_polling_type = SafepointMechanism::_global_page_poll;
 void* SafepointMechanism::_poll_armed_value;
 void* SafepointMechanism::_poll_disarmed_value;
 
 void SafepointMechanism::default_initialize() {
-  if (ThreadLocalHandshakes) {
-    set_uses_thread_local_poll();
+  if (uses_thread_local_poll()) {
 
     // Poll bit values
     intptr_t poll_armed_value = poll_bit();
--- a/src/hotspot/share/runtime/safepointMechanism.hpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/safepointMechanism.hpp	Wed Dec 11 15:30:07 2019 +0100
@@ -32,14 +32,8 @@
 
 // This is the abstracted interface for the safepoint implementation
 class SafepointMechanism : public AllStatic {
-  enum PollingType {
-    _global_page_poll,
-    _thread_local_poll
-  };
-  static PollingType _polling_type;
   static void* _poll_armed_value;
   static void* _poll_disarmed_value;
-  static void set_uses_thread_local_poll()            { _polling_type     = _thread_local_poll; }
 
   static void* poll_armed_value()                     { return _poll_armed_value; }
   static void* poll_disarmed_value()                  { return _poll_disarmed_value; }
@@ -65,10 +59,8 @@
 public:
   static intptr_t poll_bit() { return _poll_bit; }
 
-  static bool uses_global_page_poll() { return _polling_type == _global_page_poll; }
-  static bool uses_thread_local_poll() { return _polling_type == _thread_local_poll; }
-
-  static bool supports_thread_local_poll() {
+  static bool uses_global_page_poll() { return !uses_thread_local_poll(); }
+  static bool uses_thread_local_poll() {
 #ifdef THREAD_LOCAL_POLL
     return true;
 #else
--- a/src/hotspot/share/runtime/sweeper.cpp	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/hotspot/share/runtime/sweeper.cpp	Wed Dec 11 15:30:07 2019 +0100
@@ -250,7 +250,7 @@
 
 CodeBlobClosure* NMethodSweeper::prepare_mark_active_nmethods() {
 #ifdef ASSERT
-  if (ThreadLocalHandshakes) {
+  if (SafepointMechanism::uses_thread_local_poll()) {
     assert(Thread::current()->is_Code_cache_sweeper_thread(), "must be executed under CodeCache_lock and in sweeper thread");
     assert_lock_strong(CodeCache_lock);
   } else {
@@ -317,7 +317,7 @@
 void NMethodSweeper::do_stack_scanning() {
   assert(!CodeCache_lock->owned_by_self(), "just checking");
   if (wait_for_stack_scanning()) {
-    if (ThreadLocalHandshakes) {
+    if (SafepointMechanism::uses_thread_local_poll()) {
       CodeBlobClosure* code_cl;
       {
         MutexLocker ccl(CodeCache_lock, Mutex::_no_safepoint_check_flag);
--- a/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.aot/share/classes/jdk.tools.jaotc.binformat/src/jdk/tools/jaotc/binformat/BinaryContainer.java	Wed Dec 11 15:30:07 2019 +0100
@@ -67,8 +67,6 @@
 
     private final int codeEntryAlignment;
 
-    private final boolean threadLocalHandshakes;
-
     /**
      * Container holding code bits and any other related information.
      */
@@ -294,8 +292,6 @@
 
         this.codeEntryAlignment = graalHotSpotVMConfig.codeEntryAlignment;
 
-        this.threadLocalHandshakes = graalHotSpotVMConfig.threadLocalHandshakes;
-
         // Section unique name is limited to 8 characters due to limitation on Windows.
         // Name could be longer but only first 8 characters are stored on Windows.
 
@@ -341,7 +337,6 @@
                                    graalHotSpotVMConfig.enableContended,
                                    graalHotSpotVMConfig.restrictContended,
                                    graphBuilderConfig.omitAssertions(),
-                                   graalHotSpotVMConfig.threadLocalHandshakes
         };
 
         int[] intFlags         = { graalHotSpotVMConfig.getOopEncoding().getShift(),
@@ -454,10 +449,6 @@
         return codeEntryAlignment;
     }
 
-    public boolean getThreadLocalHandshakes() {
-        return threadLocalHandshakes;
-    }
-
     /**
      * Gets the global AOT symbol associated with the function name.
      *
--- a/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/MarkProcessor.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/MarkProcessor.java	Wed Dec 11 15:30:07 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,11 +56,8 @@
                 break;
             case POLL_FAR:
             case POLL_RETURN_FAR:
-                if (binaryContainer.getThreadLocalHandshakes()) {
-                    // skip relocation
-                    break;
-                }
-                // fallthrough
+                // skip relocation
+                break;
             case CARD_TABLE_ADDRESS:
             case HEAP_TOP_ADDRESS:
             case HEAP_END_ADDRESS:
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotSafepointOp.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotSafepointOp.java	Wed Dec 11 15:30:07 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -81,11 +81,7 @@
     }
 
     public static void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm, GraalHotSpotVMConfig config, boolean onReturn, Register thread, Register scratch, LIRFrameState state) {
-        if (config.threadLocalHandshakes) {
-            emitThreadLocalPoll(crb, masm, config, onReturn, thread, scratch, state);
-        } else {
-            emitGlobalPoll(crb, masm, config, onReturn, scratch, state);
-        }
+        emitThreadLocalPoll(crb, masm, config, onReturn, thread, scratch, state);
     }
 
     private static void emitGlobalPoll(CompilationResultBuilder crb, AArch64MacroAssembler masm, GraalHotSpotVMConfig config, boolean onReturn, Register scratch, LIRFrameState state) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotSafepointOp.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotSafepointOp.java	Wed Dec 11 15:30:07 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,12 +67,7 @@
         this.state = state;
         this.config = config;
         this.thread = thread;
-        if (config.threadLocalHandshakes || isPollingPageFar(config) || ImmutableCode.getValue(tool.getOptions())) {
-            temp = tool.getLIRGeneratorTool().newVariable(LIRKind.value(tool.getLIRGeneratorTool().target().arch.getWordKind()));
-        } else {
-            // Don't waste a register if it's unneeded
-            temp = Value.ILLEGAL;
-        }
+        temp = tool.getLIRGeneratorTool().newVariable(LIRKind.value(tool.getLIRGeneratorTool().target().arch.getWordKind()));
     }
 
     @Override
@@ -81,11 +76,7 @@
     }
 
     public static void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler asm, GraalHotSpotVMConfig config, boolean atReturn, LIRFrameState state, Register thread, Register scratch) {
-        if (config.threadLocalHandshakes) {
-            emitThreadLocalPoll(crb, asm, config, atReturn, state, thread, scratch);
-        } else {
-            emitGlobalPoll(crb, asm, config, atReturn, state, scratch);
-        }
+        emitThreadLocalPoll(crb, asm, config, atReturn, state, thread, scratch);
     }
 
     /**
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc.test/src/org/graalvm/compiler/hotspot/sparc/test/SPARCAllocatorTest.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc.test/src/org/graalvm/compiler/hotspot/sparc/test/SPARCAllocatorTest.java	Wed Dec 11 15:30:07 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,7 @@
 
     @Test
     public void test1() {
-        testAllocation("test1snippet", config.threadLocalHandshakes ? 1 : 2, 0, 0);
+        testAllocation("test1snippet", 1 , 0, 0);
     }
 
     public static long test1snippet(long x) {
@@ -56,7 +56,7 @@
 
     @Test
     public void test2() {
-        testAllocation("test2snippet", config.threadLocalHandshakes ? 1 : 2, 0, 0);
+        testAllocation("test2snippet", 1, 0, 0);
     }
 
     public static long test2snippet(long x) {
@@ -65,7 +65,7 @@
 
     @Test
     public void test3() {
-        testAllocation("test3snippet", config.threadLocalHandshakes ? 3 : 4, 0, 0);
+        testAllocation("test3snippet", 3, 0, 0);
     }
 
     public static long test3snippet(long x) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotSafepointOp.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotSafepointOp.java	Wed Dec 11 15:30:07 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -75,11 +75,7 @@
 
     public static void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm, GraalHotSpotVMConfig config, boolean atReturn, LIRFrameState state, Register thread,
                     Value safepointPollAddress) {
-        if (config.threadLocalHandshakes) {
-            emitThreadLocalPoll(crb, masm, config, atReturn, state, thread);
-        } else {
-            emitGlobalPoll(crb, masm, config, atReturn, state, asRegister(safepointPollAddress));
-        }
+        emitThreadLocalPoll(crb, masm, config, atReturn, state, thread);
     }
 
     /**
@@ -117,19 +113,10 @@
     }
 
     static AllocatableValue getSafepointAddressValue(SPARCHotSpotLIRGenerator gen) {
-        if (gen.config.threadLocalHandshakes) {
-            return Value.ILLEGAL;
-        } else {
-            return gen.newVariable(LIRKind.value(gen.target().arch.getWordKind()));
-        }
+        return Value.ILLEGAL;
     }
 
     static void emitPrologue(SPARCHotSpotNodeLIRBuilder lir, SPARCHotSpotLIRGenerator gen) {
-        if (!gen.config.threadLocalHandshakes) {
-            AllocatableValue var = gen.getSafepointAddressValue();
-            lir.append(new SPARCHotSpotSafepointOp.SPARCLoadSafepointPollAddress(var, gen.config));
-            gen.append(((HotSpotDebugInfoBuilder) lir.getDebugInfoBuilder()).lockStack());
-        }
     }
 
     public static class SPARCLoadSafepointPollAddress extends SPARCLIRInstruction {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java	Wed Dec 11 15:27:23 2019 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java	Wed Dec 11 15:30:07 2019 +0100
@@ -96,7 +96,6 @@
     public final boolean useAESCTRIntrinsics = getFlag("UseAESCTRIntrinsics", Boolean.class, false);
     public final boolean useCRC32Intrinsics = getFlag("UseCRC32Intrinsics", Boolean.class);
     public final boolean useCRC32CIntrinsics = versioned.useCRC32CIntrinsics;
-    public final boolean threadLocalHandshakes = getFlag("ThreadLocalHandshakes", Boolean.class, false);
 
     private final boolean useMultiplyToLenIntrinsic = getFlag("UseMultiplyToLenIntrinsic", Boolean.class);
     private final boolean useSHA1Intrinsics = getFlag("UseSHA1Intrinsics", Boolean.class);