X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86.h;h=27e88505150b4b4cef2bb5d3ee356be296bf7620;hb=1292c226458b68a119d3a387a0527f453b2065c2;hp=5c5133ebf5d79814b32eabdceed2ab799322f690;hpb=055c965bff7c8567e7fae90ffe1e10e109856064;p=oota-llvm.git diff --git a/lib/Target/X86/X86.h b/lib/Target/X86/X86.h index 5c5133ebf5d..27e88505150 100644 --- a/lib/Target/X86/X86.h +++ b/lib/Target/X86/X86.h @@ -1,62 +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 MachineFunction; -class Function; -class TargetMachine; +#include "llvm/Target/TargetMachine.h" + +namespace llvm { -/// X86PrintCode - 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. +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. /// -void X86PrintCode(const MachineFunction *MF, std::ostream &O); +FunctionPass *createX86ISelDag(X86TargetMachine &TM, + CodeGenOpt::Level OptLevel); + +/// createGlobalBaseRegPass - This pass initializes a global base +/// register for PIC on x86-32. +FunctionPass* createGlobalBaseRegPass(); -/// X86SimpleInstructionSelection - This function 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. +/// createX86FloatingPointStackifierPass - This function returns a pass which +/// converts floating point register references and pseudo instructions into +/// floating point stack references and physical instructions. /// -MachineFunction *X86SimpleInstructionSelection(Function &F, TargetMachine &TM); +FunctionPass *createX86FloatingPointStackifierPass(); -/// X86SimpleRegisterAllocation - This function converts the specified machine -/// code function from SSA form to use explicit registers by spilling every -/// register. Wow, great policy huh? +/// 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. /// -inline void X86SimpleRegisterAllocation(MachineFunction *MF) {} +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. /// -inline void *X86EmitCodeToMemory(MachineFunction *MF) { return 0; } +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, FLAGS, TSFLAGS) ENUM, -#include "X86InstrInfo.def" - }; -} +#include "X86GenInstrNames.inc" #endif