X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86.h;h=27e88505150b4b4cef2bb5d3ee356be296bf7620;hb=1292c226458b68a119d3a387a0527f453b2065c2;hp=81c68da58e9b1e5cd522828e3165826db29dffa3;hpb=de420aee32ea799eada24afb59857040172c75d1;p=oota-llvm.git diff --git a/lib/Target/X86/X86.h b/lib/Target/X86/X86.h index 81c68da58e9..27e88505150 100644 --- a/lib/Target/X86/X86.h +++ b/lib/Target/X86/X86.h @@ -1,5 +1,12 @@ //===-- X86.h - Top-level interface for X86 representation ------*- C++ -*-===// // +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// // This file contains the entry points for global functions defined in the x86 // target library, as used by the LLVM JIT. // @@ -8,57 +15,76 @@ #ifndef TARGET_X86_H #define TARGET_X86_H -#include -class TargetMachine; -class Pass; +#include "llvm/Target/TargetMachine.h" -/// createSimpleX86InstructionSelector - This pass converts an LLVM function -/// into a machine code representation is a very simple peep-hole fashion. The -/// generated code sucks but the implementation is nice and simple. -/// -Pass *createSimpleX86InstructionSelector(TargetMachine &TM); +namespace llvm { -/// createX86PeepholeOptimizer - Create a pass to perform X86 specific peephole -/// optimizations. +class FunctionPass; +class JITCodeEmitter; +class MCCodeEmitter; +class MCContext; +class MachineCodeEmitter; +class Target; +class TargetAsmBackend; +class X86TargetMachine; +class formatted_raw_ostream; + +/// createX86ISelDag - This pass converts a legalized DAG into a +/// X86-specific DAG, ready for instruction scheduling. /// -Pass *createX86PeepholeOptimizerPass(); +FunctionPass *createX86ISelDag(X86TargetMachine &TM, + CodeGenOpt::Level OptLevel); + +/// createGlobalBaseRegPass - This pass initializes a global base +/// register for PIC on x86-32. +FunctionPass* createGlobalBaseRegPass(); /// createX86FloatingPointStackifierPass - This function returns a pass which /// converts floating point register references and pseudo instructions into /// floating point stack references and physical instructions. /// -Pass *createX86FloatingPointStackifierPass(); +FunctionPass *createX86FloatingPointStackifierPass(); -/// createX86CodePrinterPass - Returns a pass that prints the X86 -/// assembly code for a MachineFunction to the given output stream, -/// using the given target machine description. This should work -/// regardless of whether the function is in SSA form. -/// -Pass *createX86CodePrinterPass(std::ostream &o, TargetMachine &tm); +/// createSSEDomainFixPass - This pass twiddles SSE opcodes to prevent domain +/// crossings. +FunctionPass *createSSEDomainFixPass(); + +/// createX86CodeEmitterPass - Return a pass that emits the collected X86 code +/// to the specified MCE object. +FunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM, + JITCodeEmitter &JCE); -/// X86EmitCodeToMemory - This function converts a register allocated function -/// into raw machine code in a dynamically allocated chunk of memory. A pointer -/// to the start of the function is returned. +MCCodeEmitter *createX86_32MCCodeEmitter(const Target &, TargetMachine &TM, + MCContext &Ctx); +MCCodeEmitter *createX86_64MCCodeEmitter(const Target &, TargetMachine &TM, + MCContext &Ctx); + +TargetAsmBackend *createX86_32AsmBackend(const Target &, const std::string &); +TargetAsmBackend *createX86_64AsmBackend(const Target &, const std::string &); + +/// createX86EmitCodeToMemory - Returns a pass that converts a register +/// allocated function into raw machine code in a dynamically +/// allocated chunk of memory. /// -Pass *createEmitX86CodeToMemory(); +FunctionPass *createEmitX86CodeToMemory(); -/// X86 namespace - This namespace contains all of the register and opcode enums -/// used by the X86 backend. +/// createX86MaxStackAlignmentHeuristicPass - This function returns a pass +/// which determines whether the frame pointer register should be +/// reserved in case dynamic stack alignment is later required. /// -namespace X86 { - // Defines a large number of symbolic names for X86 registers. This defines a - // mapping from register name to register number. - // - enum Register { -#define R(ENUM, NAME, FLAGS, TSFLAGS, ALIAS_SET) ENUM, -#include "X86RegisterInfo.def" - }; - - // This defines a large number of symbolic names for X86 instruction opcodes. - enum Opcode { -#define I(ENUM, NAME, BASEOPCODE, FLAGS, TSFLAGS, IMPDEFS, IMPUSES) ENUM, -#include "X86InstrInfo.def" - }; -} +FunctionPass *createX86MaxStackAlignmentHeuristicPass(); + +extern Target TheX86_32Target, TheX86_64Target; + +} // End llvm namespace + +// Defines symbolic names for X86 registers. This defines a mapping from +// register name to register number. +// +#include "X86GenRegisterNames.inc" + +// Defines symbolic names for the X86 instructions. +// +#include "X86GenInstrNames.inc" #endif