X86TargetMachine.h revision 224145
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 &CPU, const std::string &FS, 47 bool is64Bit); 48 49 virtual const X86InstrInfo *getInstrInfo() const { 50 llvm_unreachable("getInstrInfo not implemented"); 51 } 52 virtual const TargetFrameLowering *getFrameLowering() const { 53 return &FrameLowering; 54 } 55 virtual X86JITInfo *getJITInfo() { 56 llvm_unreachable("getJITInfo not implemented"); 57 } 58 virtual const X86Subtarget *getSubtargetImpl() const{ return &Subtarget; } 59 virtual const X86TargetLowering *getTargetLowering() const { 60 llvm_unreachable("getTargetLowering not implemented"); 61 } 62 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 63 llvm_unreachable("getSelectionDAGInfo not implemented"); 64 } 65 virtual const X86RegisterInfo *getRegisterInfo() const { 66 return &getInstrInfo()->getRegisterInfo(); 67 } 68 virtual const X86ELFWriterInfo *getELFWriterInfo() const { 69 return Subtarget.isTargetELF() ? &ELFWriterInfo : 0; 70 } 71 72 // Set up the pass pipeline. 73 virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 74 virtual bool addPreRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 75 virtual bool addPostRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 76 virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 77 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 78 JITCodeEmitter &JCE); 79}; 80 81/// X86_32TargetMachine - X86 32-bit target machine. 82/// 83class X86_32TargetMachine : public X86TargetMachine { 84 const TargetData DataLayout; // Calculates type size & alignment 85 X86InstrInfo InstrInfo; 86 X86SelectionDAGInfo TSInfo; 87 X86TargetLowering TLInfo; 88 X86JITInfo JITInfo; 89public: 90 X86_32TargetMachine(const Target &T, const std::string &M, 91 const std::string &CPU, const std::string &FS); 92 virtual const TargetData *getTargetData() const { return &DataLayout; } 93 virtual const X86TargetLowering *getTargetLowering() const { 94 return &TLInfo; 95 } 96 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 97 return &TSInfo; 98 } 99 virtual const X86InstrInfo *getInstrInfo() const { 100 return &InstrInfo; 101 } 102 virtual X86JITInfo *getJITInfo() { 103 return &JITInfo; 104 } 105}; 106 107/// X86_64TargetMachine - X86 64-bit target machine. 108/// 109class X86_64TargetMachine : public X86TargetMachine { 110 const TargetData DataLayout; // Calculates type size & alignment 111 X86InstrInfo InstrInfo; 112 X86SelectionDAGInfo TSInfo; 113 X86TargetLowering TLInfo; 114 X86JITInfo JITInfo; 115public: 116 X86_64TargetMachine(const Target &T, const std::string &TT, 117 const std::string &CPU, const std::string &FS); 118 virtual const TargetData *getTargetData() const { return &DataLayout; } 119 virtual const X86TargetLowering *getTargetLowering() const { 120 return &TLInfo; 121 } 122 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 123 return &TSInfo; 124 } 125 virtual const X86InstrInfo *getInstrInfo() const { 126 return &InstrInfo; 127 } 128 virtual X86JITInfo *getJITInfo() { 129 return &JITInfo; 130 } 131}; 132 133} // End llvm namespace 134 135#endif 136