X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86.h;h=457e18ab0f3da9976062ae470e5ced2f99e41ba4;hb=4246790aa84a530b0378d917023584c2c7adb4a9;hp=b2176aa1ebec90547ffa5827d6b1eca56b566f22;hpb=f2ab4124e39b6427054bc149475262bd9a110431;p=oota-llvm.git diff --git a/lib/Target/X86/X86.h b/lib/Target/X86/X86.h index b2176aa1ebe..457e18ab0f3 100644 --- a/lib/Target/X86/X86.h +++ b/lib/Target/X86/X86.h @@ -1,66 +1,85 @@ //===-- 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 { + +class X86TargetMachine; +class FunctionPass; +class MachineCodeEmitter; +class JITCodeEmitter; +class formatted_raw_ostream; -/// 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. +/// 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); -/// createSimpleRegisterAllocation - This function returns a pass that 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 *createSimpleRegisterAllocator(); -Pass *createLocalRegisterAllocator(); +FunctionPass *createX86FloatingPointStackifierPass(); -/// createPrologEpilogCodeInserter - This function returns a pass that inserts -/// prolog and epilog code, and eliminates abstract frame references. +/// createX87FPRegKillInserterPass - This function returns a pass which +/// inserts FP_REG_KILL instructions where needed. /// -Pass *createPrologEpilogCodeInserter(); +FunctionPass *createX87FPRegKillInserterPass(); -/// 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. +/// createX86CodePrinterPass - Returns a pass that prints the X86 +/// assembly code for a MachineFunction to the given output stream, +/// using the given target machine description. /// -Pass *createX86CodePrinterPass(std::ostream &O); +FunctionPass *createX86CodePrinterPass(formatted_raw_ostream &o, + TargetMachine &tm, + bool Verbose); -/// 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. +/// createX86CodeEmitterPass - Return a pass that emits the collected X86 code +/// to the specified MCE object. + +FunctionPass *createX86CodeEmitterPass(X86TargetMachine &TM, + MachineCodeEmitter &MCE); +FunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM, + JITCodeEmitter &JCE); +FunctionPass *createX86ObjectCodeEmitterPass(X86TargetMachine &TM, + ObjectCodeEmitter &OCE); + +/// createX86EmitCodeToMemory - Returns a pass that converts a register +/// allocated function into raw machine code in a dynamically +/// allocated chunk of memory. +/// +FunctionPass *createEmitX86CodeToMemory(); + +/// createX86MaxStackAlignmentCalculatorPass - This function returns a pass +/// which calculates maximal stack alignment required for function /// -Pass *createEmitX86CodeToMemory(); +FunctionPass *createX86MaxStackAlignmentCalculatorPass(); + +} // 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, 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" - }; -} +#include "X86GenInstrNames.inc" #endif