1 //===-- Passes.h - Target independent code generation passes ----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines interfaces to access the target independent code generation
11 // passes provided by the LLVM backend.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_CODEGEN_PASSES_H
16 #define LLVM_CODEGEN_PASSES_H
24 // PHIElimination pass - This pass eliminates machine instruction PHI nodes by
25 // inserting copy instructions. This destroys SSA information, but is the
26 // desired input for some register allocators. This pass is "required" by these
27 // register allocator like this: AU.addRequiredID(PHIEliminationID);
29 extern const PassInfo *PHIEliminationID;
31 /// Creates a register allocator as the user specified on the command
33 FunctionPass *createRegisterAllocator();
35 /// SimpleRegisterAllocation Pass - This pass converts the input machine code
36 /// from SSA form to use explicit registers by spilling every register. Wow,
39 FunctionPass *createSimpleRegisterAllocator();
41 /// LocalRegisterAllocation Pass - This pass register allocates the input code a
42 /// basic block at a time, yielding code better than the simple register
43 /// allocator, but not as good as a global allocator.
45 FunctionPass *createLocalRegisterAllocator();
47 /// PrologEpilogCodeInserter Pass - This pass inserts prolog and epilog code,
48 /// and eliminates abstract frame references.
50 FunctionPass *createPrologEpilogCodeInserter();
53 /// getRegisterAllocator - This creates an instance of the register allocator
55 FunctionPass *getRegisterAllocator(TargetMachine &T);
57 } // End llvm namespace