#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
///
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.
/// 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