X86TargetMachine.h revision d0fde30ce850b78371fd1386338350591f9ff494
1b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- C++ -*-===//
2b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//
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.
7856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//
8856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//===----------------------------------------------------------------------===//
9856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//
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"
20b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#include "X86InstrInfo.h"
21b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm {
23d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
24b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattnerclass X86TargetMachine : public TargetMachine {
25fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  X86InstrInfo InstrInfo;
26fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  TargetFrameInfo FrameInfo;
27b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattnerpublic:
28bb144a892b51ee4dc53471c490bda28de3cbcd79Chris Lattner  X86TargetMachine(const Module &M);
29b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
30fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  virtual const X86InstrInfo     &getInstrInfo() const { return InstrInfo; }
31fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  virtual const TargetFrameInfo  &getFrameInfo() const { return FrameInfo; }
32fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  virtual const MRegisterInfo *getRegisterInfo() const {
33fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner    return &InstrInfo.getRegisterInfo();
34fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  }
35fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner
36d0f166a4868c957041fa0ca0a35adde97aa10c91Chris Lattner  virtual const TargetSchedInfo &getSchedInfo()  const { abort(); }
37d0f166a4868c957041fa0ca0a35adde97aa10c91Chris Lattner  virtual const TargetRegInfo   &getRegInfo()    const { abort(); }
38f27eeea54fb0176986f76731c499176345047dffChris Lattner  virtual const TargetCacheInfo  &getCacheInfo() const { abort(); }
39b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
40b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  /// addPassesToJITCompile - Add passes to the specified pass manager to
41b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  /// implement a fast dynamic compiler for this target.  Return true if this is
42b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  /// not supported for this target.
43b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  ///
448844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  virtual bool addPassesToJITCompile(FunctionPassManager &PM);
4540ead9592888c345d6514dff427ae67dfcf23805Chris Lattner
4640ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// addPassesToEmitMachineCode - Add passes to the specified pass manager to
478844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  /// get machine code emitted.  This uses a MachineCodeEmitter object to handle
4840ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// actually outputting the machine code and resolving things like the address
4940ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// of functions.  This method should returns true if machine code emission is
5040ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// not supported.
5140ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  ///
528844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM,
5340ead9592888c345d6514dff427ae67dfcf23805Chris Lattner                                          MachineCodeEmitter &MCE);
54de3aa4f77f511ace5b9fc1e3a777b0c3ec5ffa27Brian Gaeke
55de3aa4f77f511ace5b9fc1e3a777b0c3ec5ffa27Brian Gaeke  virtual bool addPassesToEmitAssembly(PassManager &PM, std::ostream &Out);
569a7871bd3dceafd644008c740617d4516a34a601Brian Gaeke
570522b0846c3732c7cdd317431733f2e5b6037d8dBrian Gaeke  virtual void replaceMachineCodeForFunction (void *Old, void *New);
58b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner};
59b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
60d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace
61d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
62b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#endif
63