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:
parent
d8faf7adb4
commit
3126c532b2
@ -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*> {
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user