mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-24 23:19:03 +00:00
Add a lock() function in PassRegistry to speed up multi-thread synchronization.
When calling lock() after all passes are registered, the PassRegistry doesn't need a mutex anymore to look up passes. This speeds up multithreaded llvm execution by ~5% (tested with 4 threads). In an asserts build of llvm this has an even bigger impact. Note that it's not required to use the lock function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -41,6 +41,9 @@ struct PassRegistrationListener;
|
||||
class PassRegistry {
|
||||
mutable sys::SmartRWMutex<true> Lock;
|
||||
|
||||
/// Only if false, synchronization must use the Lock mutex.
|
||||
std::atomic<bool> locked;
|
||||
|
||||
/// PassInfoMap - Keep track of the PassInfo object for each registered pass.
|
||||
typedef DenseMap<const void *, const PassInfo *> MapType;
|
||||
MapType PassInfoMap;
|
||||
@@ -52,7 +55,7 @@ class PassRegistry {
|
||||
std::vector<PassRegistrationListener *> Listeners;
|
||||
|
||||
public:
|
||||
PassRegistry() {}
|
||||
PassRegistry() : locked(false) {}
|
||||
~PassRegistry();
|
||||
|
||||
/// getPassRegistry - Access the global registry object, which is
|
||||
@@ -60,6 +63,10 @@ public:
|
||||
/// llvm_shutdown.
|
||||
static PassRegistry *getPassRegistry();
|
||||
|
||||
/// Enables fast thread synchronization in getPassInfo().
|
||||
/// After calling lock() no more passes may be registered.
|
||||
void lock() { locked = true; }
|
||||
|
||||
/// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
|
||||
/// type identifier (&MyPass::ID).
|
||||
const PassInfo *getPassInfo(const void *TI) const;
|
||||
|
||||
Reference in New Issue
Block a user