Moved some ManagedStatics out of the SlotIndexes header.
authorLang Hames <lhames@gmail.com>
Sun, 8 Nov 2009 08:49:59 +0000 (08:49 +0000)
committerLang Hames <lhames@gmail.com>
Sun, 8 Nov 2009 08:49:59 +0000 (08:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86446 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/SlotIndexes.h
lib/CodeGen/SlotIndexes.cpp

index 294827dc65e6b51a35f4d37f895bdb45b8afa821..ac63a4c60da2f0aeb34031d3c4e5f2106fa11f89 100644 (file)
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/ManagedStatic.h"
 
 namespace llvm {
 
-  class EmptyIndexListEntry;
-  class TombstoneIndexListEntry;
-
   /// This class represents an entry in the slot index list held in the
   /// SlotIndexes pass. It should not be used directly. See the
   /// SlotIndex & SlotIndexes classes for the public interface to this
@@ -46,11 +42,6 @@ namespace llvm {
     static const unsigned EMPTY_KEY_INDEX = ~0U & ~3U,
                           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;
     MachineInstr *mi;
     unsigned index;
@@ -116,31 +107,13 @@ namespace llvm {
 
     // This function returns the index list entry that is to be used for empty
     // SlotIndex keys.
-    inline static IndexListEntry* getEmptyKeyEntry();
+    static IndexListEntry* getEmptyKeyEntry();
 
     // This function returns the index list entry that is to be used for
     // tombstone SlotIndex keys.
-    inline static IndexListEntry* getTombstoneKeyEntry();
-  };
-
-  class EmptyIndexListEntry : public IndexListEntry {
-  public:
-    EmptyIndexListEntry() : IndexListEntry(EMPTY_KEY) {}
-  };
-
-  class TombstoneIndexListEntry : public IndexListEntry {
-  public:
-    TombstoneIndexListEntry() : IndexListEntry(TOMBSTONE_KEY) {}
+    static IndexListEntry* getTombstoneKeyEntry();
   };
 
-  inline IndexListEntry* IndexListEntry::getEmptyKeyEntry() {
-    return &*emptyKeyEntry;
-  }
-
-  inline IndexListEntry* IndexListEntry::getTombstoneKeyEntry() {
-    return &*tombstoneKeyEntry;
-  }
-
   // Specialize PointerLikeTypeTraits for IndexListEntry.
   template <>
   class PointerLikeTypeTraits<IndexListEntry*> { 
index d99d120509ddde3c2da688b06a857adae4f58180..9519114b5a38f6ac81c231bead3c6e6efc334992 100644 (file)
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/ManagedStatic.h"
 
 using namespace llvm;
 
 
 // Yep - these are thread safe. See the header for details. 
-ManagedStatic<EmptyIndexListEntry> IndexListEntry::emptyKeyEntry;
-ManagedStatic<TombstoneIndexListEntry> IndexListEntry::tombstoneKeyEntry;
+namespace {
+
+
+  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;
 static RegisterPass<SlotIndexes> X("slotindexes", "Slot index numbering");
 
+IndexListEntry* IndexListEntry::getEmptyKeyEntry() {
+  return &*IndexListEntryEmptyKey;
+}
+
+IndexListEntry* IndexListEntry::getTombstoneKeyEntry() {
+  return &*IndexListEntryTombstoneKey;
+}
+
+
 void SlotIndexes::getAnalysisUsage(AnalysisUsage &au) const {
   au.setPreservesAll();
   MachineFunctionPass::getAnalysisUsage(au);