[PATCH] Change base mutex implementations to use STL-provided mutexes

Zachary Turner zturner at google.com
Thu Jun 5 10:06:06 PDT 2014


Hi rnk, aaron.ballman, chandlerc,

This is a re-submission of an earlier broken patch.

Change llvm::sys::Mutex implementation to use std::mutex and std::recursive_mutex.

This patch deletes the platform specific mutex implementations, and delegates to the underlying STL implementation. Because STL mutex and recursive_mutex are implemented as separate classes, it is no longer possible to specify as a runtime param whether a recursive mutex is desired, and instead the decision must be made at compile time.

As part of this refactor, the ScopedLock class is deleted in favor of MutexGuard, which provides equivalent functionality.

To make reviewing easier, you can refer to the following table of equivalences in the format (old_type -> new_type)

SmartMutex<true>([true]) -> RecursiveDebugMutex

SmartMutex<false>([true]) -> RecursiveMutex
sys::Mutex -> SmartMutex<false>() -> RecursiveMutex

SmartMutex<true>(false) -> NonRecursiveDebugMutex
SmartMutex<false>(false) -> NonRecursiveMutex

One caveat of note is that on Windows std::*mutex cannot be used during an atexit handler.  To get around this, a new type AtexitSafeMutex is defined, and on Windows this is typedefed to a critical section.

http://reviews.llvm.org/D4033

Files:
  include/llvm/ExecutionEngine/ExecutionEngine.h
  include/llvm/IR/ValueMap.h
  include/llvm/Support/Mutex.h
  include/llvm/Support/MutexGuard.h
  lib/CodeGen/PseudoSourceValue.cpp
  lib/CodeGen/SelectionDAG/SelectionDAG.cpp
  lib/ExecutionEngine/ExecutionEngine.cpp
  lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
  lib/ExecutionEngine/JIT/JIT.cpp
  lib/ExecutionEngine/JIT/JITEmitter.cpp
  lib/ExecutionEngine/OProfileJIT/OProfileWrapper.cpp
  lib/ExecutionEngine/RuntimeDyld/GDBRegistrar.cpp
  lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
  lib/IR/LeakDetector.cpp
  lib/IR/LegacyPassManager.cpp
  lib/Support/CMakeLists.txt
  lib/Support/CrashRecoveryContext.cpp
  lib/Support/DynamicLibrary.cpp
  lib/Support/Mutex.cpp
  lib/Support/PluginLoader.cpp
  lib/Support/Statistic.cpp
  lib/Support/Threading.cpp
  lib/Support/Timer.cpp
  lib/Support/Unix/Mutex.inc
  lib/Support/Unix/Process.inc
  lib/Support/Unix/Signals.inc
  lib/Support/Windows/DynamicLibrary.inc
  lib/Support/Windows/Mutex.inc
  lib/Target/NVPTX/NVPTXUtilities.cpp
  unittests/IR/ValueMapTest.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4033.10143.patch
Type: text/x-patch
Size: 39449 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140605/de414df3/attachment.bin>


More information about the llvm-commits mailing list