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

Aaron Ballman aaron.ballman at gmail.com
Thu Jun 5 12:27:13 PDT 2014


Is there a clang companion patch as well?

~Aaron

On Thu, Jun 5, 2014 at 1:06 PM, Zachary Turner <zturner at google.com> wrote:
> 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




More information about the llvm-commits mailing list