Revert r231276 (including r231277): Add a lock() function in PassRegistry to speed up multi-thread synchronization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231385 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Erik Eckstein 2015-03-05 17:53:00 +00:00
parent 98638f07f1
commit 8b4cc5e616
2 changed files with 3 additions and 27 deletions

View File

@ -25,7 +25,6 @@
#include "llvm/PassInfo.h"
#include "llvm/Support/CBindingWrapping.h"
#include "llvm/Support/RWMutex.h"
#include <atomic>
#include <vector>
namespace llvm {
@ -42,9 +41,6 @@ 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;
@ -56,7 +52,7 @@ class PassRegistry {
std::vector<PassRegistrationListener *> Listeners;
public:
PassRegistry() : locked(false) {}
PassRegistry() {}
~PassRegistry();
/// getPassRegistry - Access the global registry object, which is
@ -64,10 +60,6 @@ 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;

View File

@ -13,7 +13,6 @@
//===----------------------------------------------------------------------===//
#include "llvm/PassRegistry.h"
#include "llvm/ADT/Optional.h"
#include "llvm/IR/Function.h"
#include "llvm/PassSupport.h"
#include "llvm/Support/Compiler.h"
@ -40,23 +39,13 @@ PassRegistry *PassRegistry::getPassRegistry() {
PassRegistry::~PassRegistry() {}
const PassInfo *PassRegistry::getPassInfo(const void *TI) const {
// We don't need thread synchronization after the PassRegistry is locked
// (that means: is read-only).
Optional<sys::SmartScopedReader<true>> Guard;
if (!locked)
Guard.emplace(Lock);
sys::SmartScopedReader<true> Guard(Lock);
MapType::const_iterator I = PassInfoMap.find(TI);
return I != PassInfoMap.end() ? I->second : nullptr;
}
const PassInfo *PassRegistry::getPassInfo(StringRef Arg) const {
// We don't need thread synchronization after the PassRegistry is locked
// (that means: is read-only).
Optional<sys::SmartScopedReader<true>> Guard;
if (!locked)
Guard.emplace(Lock);
sys::SmartScopedReader<true> Guard(Lock);
StringMapType::const_iterator I = PassInfoStringMap.find(Arg);
return I != PassInfoStringMap.end() ? I->second : nullptr;
}
@ -66,9 +55,6 @@ const PassInfo *PassRegistry::getPassInfo(StringRef Arg) const {
//
void PassRegistry::registerPass(const PassInfo &PI, bool ShouldFree) {
assert(!locked && "Trying to register a pass in a locked PassRegistry");
sys::SmartScopedWriter<true> Guard(Lock);
bool Inserted =
PassInfoMap.insert(std::make_pair(PI.getTypeInfo(), &PI)).second;
@ -82,8 +68,6 @@ void PassRegistry::registerPass(const PassInfo &PI, bool ShouldFree) {
if (ShouldFree)
ToFree.push_back(std::unique_ptr<const PassInfo>(&PI));
assert(!locked && "PassRegistry locked during registering a pass");
}
void PassRegistry::enumerateWith(PassRegistrationListener *L) {