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