X86TargetMachine.h revision a69571c7991813c93cba64e88eced6899ce93d81
1b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- C++ -*-===// 20e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman// 3856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// The LLVM Compiler Infrastructure 4856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// 5856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// This file was developed by the LLVM research group and is distributed under 6856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details. 70e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman// 8856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//===----------------------------------------------------------------------===// 90e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman// 10b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner// This file declares the X86 specific subclass of TargetMachine. 11b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner// 12b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//===----------------------------------------------------------------------===// 13b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner 14b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#ifndef X86TARGETMACHINE_H 15b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#define X86TARGETMACHINE_H 16b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner 17b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#include "llvm/Target/TargetMachine.h" 188bd66e690779c838db51f55cf0b31d7206b3b659Chris Lattner#include "llvm/Target/TargetFrameInfo.h" 198844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke#include "llvm/PassManager.h" 20c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng#include "X86.h" 21b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#include "X86InstrInfo.h" 221e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner#include "X86JITInfo.h" 23fb5792f416089d8d8d0c6ee62c1f41a55d2cf75dNate Begeman#include "X86Subtarget.h" 24c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng#include "X86ISelLowering.h" 25b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner 26d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm { 27d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 28b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattnerclass X86TargetMachine : public TargetMachine { 29a69571c7991813c93cba64e88eced6899ce93d81Owen Anderson const TargetData DataLayout; // Calculates type size & alignment 30c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng X86InstrInfo InstrInfo; 31c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng X86Subtarget Subtarget; 32c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng TargetFrameInfo FrameInfo; 33c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng X86JITInfo JITInfo; 34c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng X86TargetLowering TLInfo; 35b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattnerpublic: 36bc641b9d8b5ecafe0137c1a49f4777608981d81bChris Lattner X86TargetMachine(const Module &M, const std::string &FS); 37b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner 38d029cd2d5a159823f20a91d30fd782aae871c589Chris Lattner virtual const X86InstrInfo *getInstrInfo() const { return &InstrInfo; } 39d029cd2d5a159823f20a91d30fd782aae871c589Chris Lattner virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; } 4005b15fb075307d55a61694ebcb19bbc9b13aa9f8Brian Gaeke virtual TargetJITInfo *getJITInfo() { return &JITInfo; } 41fb5792f416089d8d8d0c6ee62c1f41a55d2cf75dNate Begeman virtual const TargetSubtarget *getSubtargetImpl() const{ return &Subtarget; } 42c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng virtual X86TargetLowering *getTargetLowering() { return &TLInfo; } 4305b15fb075307d55a61694ebcb19bbc9b13aa9f8Brian Gaeke virtual const MRegisterInfo *getRegisterInfo() const { 44fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner return &InstrInfo.getRegisterInfo(); 45fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner } 46a69571c7991813c93cba64e88eced6899ce93d81Owen Anderson virtual const TargetData *getTargetData() const { return &DataLayout; } 47fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner 488844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM, 4940ead9592888c345d6514dff427ae67dfcf23805Chris Lattner MachineCodeEmitter &MCE); 500e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman 510431c96cec9576611f06c513d6adcab0f950c18cChris Lattner virtual bool addPassesToEmitFile(PassManager &PM, std::ostream &Out, 52ce8eb0c16b7197eaa886f90c1ef9ab9bbf1957c4Chris Lattner CodeGenFileType FileType, bool Fast); 53d36c970a11633414e56ac1e03010dafa4a63b9c4Chris Lattner 54d36c970a11633414e56ac1e03010dafa4a63b9c4Chris Lattner static unsigned getModuleMatchQuality(const Module &M); 55d36c970a11633414e56ac1e03010dafa4a63b9c4Chris Lattner static unsigned getJITMatchQuality(); 56b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner}; 57d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace 58d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 59b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#endif 60