mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-22 11:55:12 +00:00
Ease contention on this lock by noticing that all writes to the VTs array will
be of (dynamically) constant values, so races on it are immaterial. We just need to ensure that at least one write has completed before return the pointer into it. With this change, parllc exhibits essentially no overhead on 403.gcc. llvm-svn: 79708
This commit is contained in:
parent
0fe74b95a5
commit
2a5b6c38b8
@ -5022,12 +5022,15 @@ static ManagedStatic<sys::SmartMutex<true> > VTMutex;
|
||||
/// getValueTypeList - Return a pointer to the specified value type.
|
||||
///
|
||||
const EVT *SDNode::getValueTypeList(EVT VT) {
|
||||
sys::SmartScopedLock<true> Lock(*VTMutex);
|
||||
if (VT.isExtended()) {
|
||||
return &(*EVTs->insert(VT).first);
|
||||
} else {
|
||||
// All writes to this location will have the same value, so it's ok
|
||||
// to race on it. We only need to ensure that at least one write has
|
||||
// succeeded before we return the pointer into the array.
|
||||
VTs[VT.getSimpleVT().SimpleTy] = VT;
|
||||
return &VTs[VT.getSimpleVT().SimpleTy];
|
||||
sys::MemoryFence();
|
||||
return VTs + VT.getSimpleVT().SimpleTy;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user