X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86.h;h=27e88505150b4b4cef2bb5d3ee356be296bf7620;hb=d9e3385ced2dc887e2fe8e1c071bd2611e4d3ede;hp=f2db74eed05579382c90008047f1147a8d58b180;hpb=4ce42a776a98ec0cc8583ce8552eddbf835eb06e;p=oota-llvm.git diff --git a/lib/Target/X86/X86.h b/lib/Target/X86/X86.h index f2db74eed05..27e88505150 100644 --- a/lib/Target/X86/X86.h +++ b/lib/Target/X86/X86.h @@ -1,60 +1,90 @@ //===-- 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. // -// FIXME: This file will be dramatically changed in the future -// //===----------------------------------------------------------------------===// #ifndef TARGET_X86_H #define TARGET_X86_H -#include -class TargetMachine; -class Pass; +#include "llvm/Target/TargetMachine.h" + +namespace llvm { -/// 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. +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 *createSimpleX86InstructionSelector(TargetMachine &TM); +FunctionPass *createX86ISelDag(X86TargetMachine &TM, + CodeGenOpt::Level OptLevel); + +/// createGlobalBaseRegPass - This pass initializes a global base +/// register for PIC on x86-32. +FunctionPass* createGlobalBaseRegPass(); -/// X86SimpleRegisterAllocation - This function converts the specified machine -/// code function from SSA form to use explicit registers by spilling every -/// register. Wow, great policy huh? +/// createX86FloatingPointStackifierPass - This function returns a pass which +/// converts floating point register references and pseudo instructions into +/// floating point stack references and physical instructions. /// -Pass *createSimpleX86RegisterAllocator(TargetMachine &TM); +FunctionPass *createX86FloatingPointStackifierPass(); -/// createX86CodePrinterPass - Print out the specified machine code function to -/// the specified stream. This function should work regardless of whether or -/// not the function is in SSA form or not. +/// 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); + +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 *createX86CodePrinterPass(TargetMachine &TM, std::ostream &O); +FunctionPass *createEmitX86CodeToMemory(); -/// 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. +/// createX86MaxStackAlignmentHeuristicPass - This function returns a pass +/// which determines whether the frame pointer register should be +/// reserved in case dynamic stack alignment is later required. /// -Pass *createEmitX86CodeToMemory(TargetMachine &TM); +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" -// Put symbolic names in a namespace to avoid causing these to clash with all -// kinds of other things... +// Defines symbolic names for the X86 instructions. // -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) 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" - }; -} +#include "X86GenInstrNames.inc" #endif