Allow targets to select the default scheduler by name.
authorAndrew Trick <atrick@apple.com>
Thu, 19 Apr 2012 01:34:10 +0000 (01:34 +0000)
committerAndrew Trick <atrick@apple.com>
Thu, 19 Apr 2012 01:34:10 +0000 (01:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155090 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachinePassRegistry.h
include/llvm/CodeGen/MachineScheduler.h
lib/CodeGen/MachinePassRegistry.cpp

index d5008ca2333226abec121fa9fe1e202eeaf6bc2d..90ee7f4bb9e7d6f1cea77e8f785d26d7b77d2f5d 100644 (file)
@@ -99,6 +99,7 @@ public:
   MachinePassRegistryNode *getList()                    { return List; }
   MachinePassCtor getDefault()                          { return Default; }
   void setDefault(MachinePassCtor C)                    { Default = C; }
+  void setDefault(StringRef Name);
   void setListener(MachinePassRegistryListener *L)      { Listener = L; }
 
   /// Add - Adds a function pass to the registration list.
index e852009f7e8baed3a0bab48ae18d00e5dcddc703..474c95dfef151af0c3a9b505810f520b46c5f36b 100644 (file)
@@ -81,6 +81,9 @@ public:
   static void setDefault(ScheduleDAGCtor C) {
     Registry.setDefault((MachinePassCtor)C);
   }
+  static void setDefault(StringRef Name) {
+    Registry.setDefault(Name);
+  }
   static void setListener(MachinePassRegistryListener *L) {
     Registry.setListener(L);
   }
index 58e067bcb9b26704680489a7b84c0d03387dd56c..cb204fdb3492f1f2b0c90a6a2dc5d22715bc2867 100644 (file)
@@ -18,6 +18,19 @@ using namespace llvm;
 
 void MachinePassRegistryListener::anchor() { }
 
+/// setDefault - Set the default constructor by name.
+void MachinePassRegistry::setDefault(StringRef Name) {
+  MachinePassCtor Ctor = 0;
+  for(MachinePassRegistryNode *R = getList(); R; R = R->getNext()) {
+    if (R->getName() == Name) {
+      Ctor = R->getCtor();
+      break;
+    }
+  }
+  assert(Ctor && "Unregistered pass name");
+  setDefault(Ctor);
+}
+
 /// Add - Adds a function pass to the registration list.
 ///
 void MachinePassRegistry::Add(MachinePassRegistryNode *Node) {