1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

Moved some ManagedStatics out of the SlotIndexes header.

llvm-svn: 86446
This commit is contained in:
Lang Hames 2009-11-08 08:49:59 +00:00
parent d8faf7adb4
commit 3126c532b2
2 changed files with 30 additions and 31 deletions

View File

@ -29,13 +29,9 @@
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
#include "llvm/Support/Allocator.h" #include "llvm/Support/Allocator.h"
#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ManagedStatic.h"
namespace llvm { namespace llvm {
class EmptyIndexListEntry;
class TombstoneIndexListEntry;
/// This class represents an entry in the slot index list held in the /// This class represents an entry in the slot index list held in the
/// SlotIndexes pass. It should not be used directly. See the /// SlotIndexes pass. It should not be used directly. See the
/// SlotIndex & SlotIndexes classes for the public interface to this /// SlotIndex & SlotIndexes classes for the public interface to this
@ -46,11 +42,6 @@ namespace llvm {
static const unsigned EMPTY_KEY_INDEX = ~0U & ~3U, static const unsigned EMPTY_KEY_INDEX = ~0U & ~3U,
TOMBSTONE_KEY_INDEX = ~0U & ~7U; TOMBSTONE_KEY_INDEX = ~0U & ~7U;
// The following statics are thread safe. They're read only, and you
// can't step from them to any other list entries.
static ManagedStatic<EmptyIndexListEntry> emptyKeyEntry;
static ManagedStatic<TombstoneIndexListEntry> tombstoneKeyEntry;
IndexListEntry *next, *prev; IndexListEntry *next, *prev;
MachineInstr *mi; MachineInstr *mi;
unsigned index; unsigned index;
@ -116,31 +107,13 @@ namespace llvm {
// This function returns the index list entry that is to be used for empty // This function returns the index list entry that is to be used for empty
// SlotIndex keys. // SlotIndex keys.
inline static IndexListEntry* getEmptyKeyEntry(); static IndexListEntry* getEmptyKeyEntry();
// This function returns the index list entry that is to be used for // This function returns the index list entry that is to be used for
// tombstone SlotIndex keys. // tombstone SlotIndex keys.
inline static IndexListEntry* getTombstoneKeyEntry(); static IndexListEntry* getTombstoneKeyEntry();
}; };
class EmptyIndexListEntry : public IndexListEntry {
public:
EmptyIndexListEntry() : IndexListEntry(EMPTY_KEY) {}
};
class TombstoneIndexListEntry : public IndexListEntry {
public:
TombstoneIndexListEntry() : IndexListEntry(TOMBSTONE_KEY) {}
};
inline IndexListEntry* IndexListEntry::getEmptyKeyEntry() {
return &*emptyKeyEntry;
}
inline IndexListEntry* IndexListEntry::getTombstoneKeyEntry() {
return &*tombstoneKeyEntry;
}
// Specialize PointerLikeTypeTraits for IndexListEntry. // Specialize PointerLikeTypeTraits for IndexListEntry.
template <> template <>
class PointerLikeTypeTraits<IndexListEntry*> { class PointerLikeTypeTraits<IndexListEntry*> {

View File

@ -13,17 +13,43 @@
#include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunction.h"
#include "llvm/Support/Debug.h" #include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include "llvm/Support/ManagedStatic.h"
using namespace llvm; using namespace llvm;
// Yep - these are thread safe. See the header for details. // Yep - these are thread safe. See the header for details.
ManagedStatic<EmptyIndexListEntry> IndexListEntry::emptyKeyEntry; namespace {
ManagedStatic<TombstoneIndexListEntry> IndexListEntry::tombstoneKeyEntry;
class EmptyIndexListEntry : public IndexListEntry {
public:
EmptyIndexListEntry() : IndexListEntry(EMPTY_KEY) {}
};
class TombstoneIndexListEntry : public IndexListEntry {
public:
TombstoneIndexListEntry() : IndexListEntry(TOMBSTONE_KEY) {}
};
// The following statics are thread safe. They're read only, and you
// can't step from them to any other list entries.
ManagedStatic<EmptyIndexListEntry> IndexListEntryEmptyKey;
ManagedStatic<TombstoneIndexListEntry> IndexListEntryTombstoneKey;
}
char SlotIndexes::ID = 0; char SlotIndexes::ID = 0;
static RegisterPass<SlotIndexes> X("slotindexes", "Slot index numbering"); static RegisterPass<SlotIndexes> X("slotindexes", "Slot index numbering");
IndexListEntry* IndexListEntry::getEmptyKeyEntry() {
return &*IndexListEntryEmptyKey;
}
IndexListEntry* IndexListEntry::getTombstoneKeyEntry() {
return &*IndexListEntryTombstoneKey;
}
void SlotIndexes::getAnalysisUsage(AnalysisUsage &au) const { void SlotIndexes::getAnalysisUsage(AnalysisUsage &au) const {
au.setPreservesAll(); au.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(au); MachineFunctionPass::getAnalysisUsage(au);