diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h index db3fc206a96d..1a2abff27a76 100644 --- a/llvm/include/llvm/Target/TargetMachine.h +++ b/llvm/include/llvm/Target/TargetMachine.h @@ -17,6 +17,7 @@ class MachineRegInfo; class MachineFrameInfo; class MachineCacheInfo; class PassManager; +class Pass; //--------------------------------------------------------------------------- // class TargetMachine @@ -62,17 +63,35 @@ public: virtual const MachineFrameInfo& getFrameInfo() const = 0; virtual const MachineCacheInfo& getCacheInfo() const = 0; - // // Data storage information // virtual unsigned int findOptimalStorageSize (const Type* ty) const; - // // addPassesToEmitAssembly - Add passes to the specified pass manager to get // assembly langage code emited. Typically this will involve several steps of - // code generation. + // code generation. This provides a default ordering of passes that could + // be overridden for a particular target. // - virtual void addPassesToEmitAssembly(PassManager &PM, std::ostream &Out) = 0; + virtual void addPassesToEmitAssembly(PassManager &PM, std::ostream &Out); + + // getPrologEpilogCodeInserter - Create pass to insert prolog/epilog code. + // + virtual Pass* getPrologEpilogInsertionPass() = 0; + + // getFunctionAsmPrinterPass - Create a pass to write out the generated + // machine code for a single function to the generated assembly file. + // + virtual Pass* getFunctionAsmPrinterPass(std::ostream &Out) = 0; + + // getModuleAsmPrinterPass - Create a pass to write out module-level + // information to the generated assembly file. + // + virtual Pass* getModuleAsmPrinterPass(std::ostream &Out) = 0; + + // getEmitBytecodeToAsmPass - Create a pass to emit the final LLVM bytecode + // to the generated assembly file. + // + virtual Pass* getEmitBytecodeToAsmPass(std::ostream &Out) = 0; }; #endif