Now that the ISel is available, it's possible to create a default instruction
authorJim Laskey <jlaskey@mac.com>
Tue, 1 Aug 2006 19:14:14 +0000 (19:14 +0000)
committerJim Laskey <jlaskey@mac.com>
Tue, 1 Aug 2006 19:14:14 +0000 (19:14 +0000)
scheduler creator.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29452 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/LinkAllCodegenComponents.h
include/llvm/CodeGen/ScheduleDAG.h
include/llvm/CodeGen/SelectionDAGISel.h
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index 17212c45f767d1a890fefb280bbc241f90071ad0..5c39b505fec234ee89615c611a20d91f0603e876 100644 (file)
@@ -38,6 +38,7 @@ namespace {
       (void) llvm::createBURRListDAGScheduler(NULL, NULL, NULL);
       (void) llvm::createTDRRListDAGScheduler(NULL, NULL, NULL);
       (void) llvm::createTDListDAGScheduler(NULL, NULL, NULL);
+      (void) llvm::createDefaultScheduler(NULL, NULL, NULL);
 
     }
   } ForceCodegenLinking; // Force link by creating a global definition.
index a1214db8a83562b2e8385905b66a0548ec8b9230..dbf532818be990ca5e165e7891dd4d6cce84db4c 100644 (file)
@@ -258,6 +258,11 @@ namespace llvm {
                                         SelectionDAG *DAG,
                                         MachineBasicBlock *BB);
                                         
+  /// createDefaultScheduler - This creates an instruction scheduler appropriate
+  /// for the target.
+  ScheduleDAG* createDefaultScheduler(SelectionDAGISel *IS,
+                                      SelectionDAG *DAG,
+                                      MachineBasicBlock *BB);
 }
 
 #endif
index 78179c9e2ad40292ff2ec23e0db59edca3311b06..e5d024a892f2a1e3f5bfe9c261ce9bca7d82551f 100644 (file)
@@ -41,6 +41,8 @@ public:
   MachineBasicBlock *BB;
 
   SelectionDAGISel(TargetLowering &tli) : TLI(tli), JT(0,0,0,0) {}
+  
+  TargetLowering &getTargetLowering() { return TLI; }
 
   virtual void getAnalysisUsage(AnalysisUsage &AU) const;
 
index 84daabbd635704349fa03a047e1c1997f1429d09..3a1af95e81c0ca8015155afb970921e4ab4645cf 100644 (file)
@@ -68,7 +68,8 @@ namespace {
               cl::desc("Instruction schedulers available:"));
 
   static RegisterScheduler
-  defaultListDAGScheduler("default", "  Best scheduler for the target", NULL);
+  defaultListDAGScheduler("default", "  Best scheduler for the target",
+                          createDefaultScheduler);
 } // namespace
 
 namespace {
@@ -123,6 +124,24 @@ namespace {
 }
 
 namespace llvm {
+  //===--------------------------------------------------------------------===//
+  /// createDefaultScheduler - This creates an instruction scheduler appropriate
+  /// for the target.
+  ScheduleDAG* createDefaultScheduler(SelectionDAGISel *IS,
+                                      SelectionDAG *DAG,
+                                      MachineBasicBlock *BB) {
+    TargetLowering &TLI = IS->getTargetLowering();
+    
+    if (TLI.getSchedulingPreference() == TargetLowering::SchedulingForLatency) {
+      return createTDListDAGScheduler(IS, DAG, BB);
+    } else {
+      assert(TLI.getSchedulingPreference() ==
+           TargetLowering::SchedulingForRegPressure && "Unknown sched type!");
+      return createBURRListDAGScheduler(IS, DAG, BB);
+    }
+  }
+
+
   //===--------------------------------------------------------------------===//
   /// FunctionLoweringInfo - This contains information that is global to a
   /// function that is used when lowering a region of the function.
@@ -3614,22 +3633,8 @@ void SelectionDAGISel::ScheduleAndEmitDAG(SelectionDAG &DAG) {
                                                 RegisterScheduler::getDefault();
   
   if (!Ctor) {
-    if (std::string("default") == std::string(ISHeuristic)) {
-      if (TLI.getSchedulingPreference() == TargetLowering::SchedulingForLatency)
-        Ctor = RegisterScheduler::FindCtor("list-td");
-      else {
-        assert(TLI.getSchedulingPreference() ==
-             TargetLowering::SchedulingForRegPressure && "Unknown sched type!");
-        Ctor = RegisterScheduler::FindCtor("list-burr");
-      }
-
-      assert(Ctor && "Default instruction scheduler not present");
-      if (!Ctor) Ctor = RegisterScheduler::FindCtor("none");
-    } else {
-      Ctor = RegisterScheduler::FindCtor(ISHeuristic);
-    }
-    
-     RegisterScheduler::setDefault(Ctor);
+    Ctor = RegisterScheduler::FindCtor(ISHeuristic);
+    RegisterScheduler::setDefault(Ctor);
   }
   
   assert(Ctor && "No instruction scheduler found");