eliminate some extraneous methods in SDNode
[oota-llvm.git] / include / llvm / CodeGen / Passes.h
index 01638691cfb41d2ad0feeedbe2e2f2f4d23a4c4c..adccf531eb2219072c5b1cbb10de2a2937bda5a3 100644 (file)
@@ -1,10 +1,10 @@
 //===-- Passes.h - Target independent code generation passes ----*- C++ -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
 // This file was developed by the LLVM research group and is distributed under
 // the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
 // This file defines interfaces to access the target independent code generation
 #ifndef LLVM_CODEGEN_PASSES_H
 #define LLVM_CODEGEN_PASSES_H
 
-#include <iostream>
+#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(std::ostream *OS = &std::cerr,
+  FunctionPass *createMachineFunctionPrinterPass(std::ostream *OS,
                                                  const std::string &Banner ="");
 
   /// PHIElimination pass - This pass eliminates machine instruction PHI nodes
@@ -53,9 +62,9 @@ namespace llvm {
   /// LocalRegisterAllocation Pass - This pass register allocates the input code
   /// a basic block at a time, yielding code better than the simple register
   /// allocator, but not as good as a global allocator.
-  /// 
+  ///
   FunctionPass *createLocalRegisterAllocator();
-  
+
   /// LinearScanRegisterAllocation Pass - This pass implements the linear scan
   /// register allocation algorithm, a global register allocator.
   ///
@@ -66,14 +75,32 @@ namespace llvm {
   ///
   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();
+
+  /// DebugLabelFoldingPass - This pass prunes out redundant debug labels.  This
+  /// allows a debug emitter to determine if the range of two labels is empty,
+  /// by seeing if the labels map to the same reduced label.
+  FunctionPass *createDebugLabelFoldingPass();
+
   /// 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.
   FunctionPass *createMachineCodeDeleter();
-    
+
   /// 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);
+
+  //createModuloSchedulingPass - Creates the Swing Modulo Scheduling Pass
+  FunctionPass *createModuloSchedulingSBPass(TargetMachine & targ);
+
 } // End llvm namespace
 
 #endif