X86TargetMachine.h revision 243830
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 "X86InstrInfo.h" 19#include "X86ISelLowering.h" 20#include "X86FrameLowering.h" 21#include "X86JITInfo.h" 22#include "X86SelectionDAGInfo.h" 23#include "X86Subtarget.h" 24#include "llvm/Target/TargetMachine.h" 25#include "llvm/DataLayout.h" 26#include "llvm/Target/TargetFrameLowering.h" 27#include "llvm/Target/TargetTransformImpl.h" 28 29namespace llvm { 30 31class StringRef; 32 33class X86TargetMachine : public LLVMTargetMachine { 34 X86Subtarget Subtarget; 35 X86FrameLowering FrameLowering; 36 InstrItineraryData InstrItins; 37 38public: 39 X86TargetMachine(const Target &T, StringRef TT, 40 StringRef CPU, StringRef FS, const TargetOptions &Options, 41 Reloc::Model RM, CodeModel::Model CM, 42 CodeGenOpt::Level OL, 43 bool is64Bit); 44 45 virtual const X86InstrInfo *getInstrInfo() const { 46 llvm_unreachable("getInstrInfo not implemented"); 47 } 48 virtual const TargetFrameLowering *getFrameLowering() const { 49 return &FrameLowering; 50 } 51 virtual X86JITInfo *getJITInfo() { 52 llvm_unreachable("getJITInfo not implemented"); 53 } 54 virtual const X86Subtarget *getSubtargetImpl() const{ return &Subtarget; } 55 virtual const X86TargetLowering *getTargetLowering() const { 56 llvm_unreachable("getTargetLowering not implemented"); 57 } 58 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 59 llvm_unreachable("getSelectionDAGInfo not implemented"); 60 } 61 virtual const X86RegisterInfo *getRegisterInfo() const { 62 return &getInstrInfo()->getRegisterInfo(); 63 } 64 virtual const InstrItineraryData *getInstrItineraryData() const { 65 return &InstrItins; 66 } 67 68 // Set up the pass pipeline. 69 virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 70 71 virtual bool addCodeEmitter(PassManagerBase &PM, 72 JITCodeEmitter &JCE); 73}; 74 75/// X86_32TargetMachine - X86 32-bit target machine. 76/// 77class X86_32TargetMachine : public X86TargetMachine { 78 virtual void anchor(); 79 const DataLayout DL; // Calculates type size & alignment 80 X86InstrInfo InstrInfo; 81 X86SelectionDAGInfo TSInfo; 82 X86TargetLowering TLInfo; 83 X86JITInfo JITInfo; 84 ScalarTargetTransformImpl STTI; 85 X86VectorTargetTransformInfo VTTI; 86public: 87 X86_32TargetMachine(const Target &T, StringRef TT, 88 StringRef CPU, StringRef FS, const TargetOptions &Options, 89 Reloc::Model RM, CodeModel::Model CM, 90 CodeGenOpt::Level OL); 91 virtual const DataLayout *getDataLayout() const { return &DL; } 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 virtual const ScalarTargetTransformInfo *getScalarTargetTransformInfo()const { 105 return &STTI; 106 } 107 virtual const VectorTargetTransformInfo *getVectorTargetTransformInfo()const { 108 return &VTTI; 109 } 110}; 111 112/// X86_64TargetMachine - X86 64-bit target machine. 113/// 114class X86_64TargetMachine : public X86TargetMachine { 115 virtual void anchor(); 116 const DataLayout DL; // Calculates type size & alignment 117 X86InstrInfo InstrInfo; 118 X86SelectionDAGInfo TSInfo; 119 X86TargetLowering TLInfo; 120 X86JITInfo JITInfo; 121 ScalarTargetTransformImpl STTI; 122 X86VectorTargetTransformInfo VTTI; 123public: 124 X86_64TargetMachine(const Target &T, StringRef TT, 125 StringRef CPU, StringRef FS, const TargetOptions &Options, 126 Reloc::Model RM, CodeModel::Model CM, 127 CodeGenOpt::Level OL); 128 virtual const DataLayout *getDataLayout() const { return &DL; } 129 virtual const X86TargetLowering *getTargetLowering() const { 130 return &TLInfo; 131 } 132 virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const { 133 return &TSInfo; 134 } 135 virtual const X86InstrInfo *getInstrInfo() const { 136 return &InstrInfo; 137 } 138 virtual X86JITInfo *getJITInfo() { 139 return &JITInfo; 140 } 141 virtual const ScalarTargetTransformInfo *getScalarTargetTransformInfo()const { 142 return &STTI; 143 } 144 virtual const VectorTargetTransformInfo *getVectorTargetTransformInfo()const { 145 return &VTTI; 146 } 147}; 148 149} // End llvm namespace 150 151#endif 152