Initial implementation of the nodes in a SelectionDAG.
[oota-llvm.git] / include / llvm / CodeGen / Passes.h
index 409f900a13790f659cc6b642a81910255baf18c0..866d07ff4371a7c1dbca849b64523ce09db779f5 100644 (file)
 #ifndef LLVM_CODEGEN_PASSES_H
 #define LLVM_CODEGEN_PASSES_H
 
+#include <iosfwd>
+#include <string>
+
 namespace llvm {
 
   class FunctionPass;
   class PassInfo;
   class TargetMachine;
-  
+
+  /// createUnreachableBlockEliminationPass - The LLVM code generator does not
+  /// work well with unreachable basic blocks (what live ranges make sense for a
+  /// block that cannot be reached?).  As such, a code generator should either
+  /// not instruction select unreachable blocks, or it can run this pass as it's
+  /// last LLVM modifying pass to clean up blocks that are not reachable from
+  /// the entry block.
+  FunctionPass *createUnreachableBlockEliminationPass();
+    
   /// MachineFunctionPrinter pass - This pass prints out the machine function to
   /// standard error, as a debugging tool.
-  FunctionPass *createMachineFunctionPrinterPass();
-    
+  FunctionPass *createMachineFunctionPrinterPass(std::ostream *OS,
+                                                 const std::string &Banner ="");
+
   /// PHIElimination pass - This pass eliminates machine instruction PHI nodes
   /// by inserting copy instructions.  This destroys SSA information, but is the
   /// desired input for some register allocators.  This pass is "required" by
@@ -58,11 +70,22 @@ namespace llvm {
   ///
   FunctionPass *createLinearScanRegisterAllocator();
 
+  /// IterativeScanRegisterAllocation Pass - This pass implements the iterative
+  /// scan register allocation algorithm, a global register allocator.
+  ///
+  FunctionPass *createIterativeScanRegisterAllocator();
+
   /// PrologEpilogCodeInserter Pass - This pass inserts prolog and epilog code,
   /// and eliminates abstract frame references.
   ///
   FunctionPass *createPrologEpilogCodeInserter();
 
+  /// BranchFolding Pass - This pass performs machine code CFG based
+  /// optimizations to delete branches to branches, eliminate branches to
+  /// successor blocks (creating fall throughs), and eliminating branches over
+  /// branches.
+  FunctionPass *createBranchFoldingPass();
+
   /// MachineCodeDeletion Pass - This pass deletes all of the machine code for
   /// the current function, which should happen after the function has been
   /// emitted to a .s file or to memory.
@@ -71,6 +94,10 @@ namespace llvm {
   /// getRegisterAllocator - This creates an instance of the register allocator
   /// for the Sparc.
   FunctionPass *getRegisterAllocator(TargetMachine &T);
+
+  //createModuloSchedulingPass - Creates the Swing Modulo Scheduling Pass
+  FunctionPass *createModuloSchedulingPass(TargetMachine & targ);
+
 } // End llvm namespace
 
 #endif