X86TargetMachine.h revision 218893
1//===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file declares the X86 specific subclass of TargetMachine. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef X86TARGETMACHINE_H 15#define X86TARGETMACHINE_H 16 17#include "X86.h" 18#include "X86ELFWriterInfo.h" 19#include "X86InstrInfo.h" 20#include "X86ISelLowering.h" 21#include "X86FrameLowering.h" 22#include "X86JITInfo.h" 23#include "X86SelectionDAGInfo.h" 24#include "X86Subtarget.h" 25#include "llvm/Target/TargetMachine.h" 26#include "llvm/Target/TargetData.h" 27#include "llvm/Target/TargetFrameLowering.h" 28 29namespace llvm { 30 31class formatted_raw_ostream; 32 33class X86TargetMachine : public LLVMTargetMachine { 34 X86Subtarget Subtarget; 35 X86FrameLowering FrameLowering; 36 X86ELFWriterInfo ELFWriterInfo; 37 Reloc::Model DefRelocModel; // Reloc model before it's overridden. 38 39private: 40 // We have specific defaults for X86. 41 virtual void setCodeModelForJIT(); 42 virtual void setCodeModelForStatic(); 43 44public: 45 X86TargetMachine(const Target &T, const std::string &TT, 46 const std::string &FS, bool is64Bit); 47 48 virtual const X86InstrInfo *getInstrInfo() const { 49 llvm_unreachable("getInstrInfo not implemented"); 50 } 51 virtual const TargetFrameLowering *getFrameLowering() const { 52 return &FrameLowering; 53 } 54 virtual X86JITInfo *getJITInfo() { 55 llvm_unreachable("getJITInfo not implemented"); 56 } 57 virtual const X86Subtarget *getSubtargetImpl() const{ return &Subtarget; } 58 virtual const X86TargetLowering *getTargetLowering() const { 59 llvm_unreachable("getTargetLowering not implemented"); 60 } 61 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 62 llvm_unreachable("getSelectionDAGInfo not implemented"); 63 } 64 virtual const X86RegisterInfo *getRegisterInfo() const { 65 return &getInstrInfo()->getRegisterInfo(); 66 } 67 virtual const X86ELFWriterInfo *getELFWriterInfo() const { 68 return Subtarget.isTargetELF() ? &ELFWriterInfo : 0; 69 } 70 71 // Set up the pass pipeline. 72 virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 73 virtual bool addPreRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 74 virtual bool addPostRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 75 virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 76 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 77 JITCodeEmitter &JCE); 78}; 79 80/// X86_32TargetMachine - X86 32-bit target machine. 81/// 82class X86_32TargetMachine : public X86TargetMachine { 83 const TargetData DataLayout; // Calculates type size & alignment 84 X86InstrInfo InstrInfo; 85 X86SelectionDAGInfo TSInfo; 86 X86TargetLowering TLInfo; 87 X86JITInfo JITInfo; 88public: 89 X86_32TargetMachine(const Target &T, const std::string &M, 90 const std::string &FS); 91 virtual const TargetData *getTargetData() const { return &DataLayout; } 92 virtual const X86TargetLowering *getTargetLowering() const { 93 return &TLInfo; 94 } 95 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 96 return &TSInfo; 97 } 98 virtual const X86InstrInfo *getInstrInfo() const { 99 return &InstrInfo; 100 } 101 virtual X86JITInfo *getJITInfo() { 102 return &JITInfo; 103 } 104}; 105 106/// X86_64TargetMachine - X86 64-bit target machine. 107/// 108class X86_64TargetMachine : public X86TargetMachine { 109 const TargetData DataLayout; // Calculates type size & alignment 110 X86InstrInfo InstrInfo; 111 X86SelectionDAGInfo TSInfo; 112 X86TargetLowering TLInfo; 113 X86JITInfo JITInfo; 114public: 115 X86_64TargetMachine(const Target &T, const std::string &TT, 116 const std::string &FS); 117 virtual const TargetData *getTargetData() const { return &DataLayout; } 118 virtual const X86TargetLowering *getTargetLowering() const { 119 return &TLInfo; 120 } 121 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 122 return &TSInfo; 123 } 124 virtual const X86InstrInfo *getInstrInfo() const { 125 return &InstrInfo; 126 } 127 virtual X86JITInfo *getJITInfo() { 128 return &JITInfo; 129 } 130}; 131 132} // End llvm namespace 133 134#endif 135