aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2009-06-25 17:09:00 +0000
committerOwen Anderson <resistor@mac.com>2009-06-25 17:09:00 +0000
commitef31ae3dfca1e5a2262f35d7b71419ac69ca1411 (patch)
treeb08cae1cf57d82dcaab234fcd951ac88f802ea47
parentc82bd82aed933fa52a52b3b5d440fdf49fc85d88 (diff)
downloadexternal_llvm-ef31ae3dfca1e5a2262f35d7b71419ac69ca1411.zip
external_llvm-ef31ae3dfca1e5a2262f35d7b71419ac69ca1411.tar.gz
external_llvm-ef31ae3dfca1e5a2262f35d7b71419ac69ca1411.tar.bz2
Provide guards for this shared structure. I'm not sure this actually needs
to be shared, but how/where to privatize it is not immediately clear to me. If any SelectionDAG experts see a better solution, please share! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74180 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAG.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index aa79089..8de2dfc 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -31,8 +31,10 @@
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/System/Mutex.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
@@ -4977,14 +4979,17 @@ void SDNode::Profile(FoldingSetNodeID &ID) const {
AddNodeIDNode(ID, this);
}
+static ManagedStatic<std::set<MVT, MVT::compareRawBits> > EVTs;
+static MVT VTs[MVT::LAST_VALUETYPE];
+static ManagedStatic<sys::SmartMutex<true> > VTMutex;
+
/// getValueTypeList - Return a pointer to the specified value type.
///
const MVT *SDNode::getValueTypeList(MVT VT) {
+ sys::SmartScopedLock<true> Lock(&*VTMutex);
if (VT.isExtended()) {
- static std::set<MVT, MVT::compareRawBits> EVTs;
- return &(*EVTs.insert(VT).first);
+ return &(*EVTs->insert(VT).first);
} else {
- static MVT VTs[MVT::LAST_VALUETYPE];
VTs[VT.getSimpleVT()] = VT;
return &VTs[VT.getSimpleVT()];
}