X86TargetMachine.h revision 0e0a7a45d3d0a8c865a078459d2e1c6d8967a100
1//===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source 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 "llvm/Target/TargetMachine.h" 18#include "llvm/Target/TargetFrameInfo.h" 19#include "llvm/PassManager.h" 20#include "X86InstrInfo.h" 21#include "X86JITInfo.h" 22 23namespace llvm { 24class IntrinsicLowering; 25 26class X86TargetMachine : public TargetMachine { 27 X86InstrInfo InstrInfo; 28 TargetFrameInfo FrameInfo; 29 X86JITInfo JITInfo; 30public: 31 X86TargetMachine(const Module &M, IntrinsicLowering *IL); 32 33 virtual const X86InstrInfo *getInstrInfo() const { return &InstrInfo; } 34 virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; } 35 virtual TargetJITInfo *getJITInfo() { return &JITInfo; } 36 virtual const MRegisterInfo *getRegisterInfo() const { 37 return &InstrInfo.getRegisterInfo(); 38 } 39 40 /// addPassesToEmitMachineCode - Add passes to the specified pass manager to 41 /// get machine code emitted. This uses a MachineCodeEmitter object to handle 42 /// actually outputting the machine code and resolving things like the address 43 /// of functions. This method should returns true if machine code emission is 44 /// not supported. 45 /// 46 virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM, 47 MachineCodeEmitter &MCE); 48 49 virtual bool addPassesToEmitAssembly(PassManager &PM, std::ostream &Out); 50 51 static unsigned getModuleMatchQuality(const Module &M); 52 static unsigned getJITMatchQuality(); 53}; 54} // End llvm namespace 55 56#endif 57