X86TargetMachine.h revision 0522b0846c3732c7cdd317431733f2e5b6037d8d
1b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- C++ -*-===//
2b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//
3b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner// This file declares the X86 specific subclass of TargetMachine.
4b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//
5b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner//===----------------------------------------------------------------------===//
6b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
7b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#ifndef X86TARGETMACHINE_H
8b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#define X86TARGETMACHINE_H
9b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
10b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#include "llvm/Target/TargetMachine.h"
118bd66e690779c838db51f55cf0b31d7206b3b659Chris Lattner#include "llvm/Target/TargetFrameInfo.h"
128844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke#include "llvm/PassManager.h"
13b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#include "X86InstrInfo.h"
14b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
15b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattnerclass X86TargetMachine : public TargetMachine {
16fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  X86InstrInfo InstrInfo;
17fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  TargetFrameInfo FrameInfo;
18b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattnerpublic:
19bb144a892b51ee4dc53471c490bda28de3cbcd79Chris Lattner  X86TargetMachine(const Module &M);
20b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
21fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  virtual const X86InstrInfo     &getInstrInfo() const { return InstrInfo; }
22fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  virtual const TargetFrameInfo  &getFrameInfo() const { return FrameInfo; }
23fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  virtual const MRegisterInfo *getRegisterInfo() const {
24fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner    return &InstrInfo.getRegisterInfo();
25fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner  }
26fde4b51baae5746bc8d7eccff7a9a1e2b6e6e8e9Chris Lattner
27d0f166a4868c957041fa0ca0a35adde97aa10c91Chris Lattner  virtual const TargetSchedInfo &getSchedInfo()  const { abort(); }
28d0f166a4868c957041fa0ca0a35adde97aa10c91Chris Lattner  virtual const TargetRegInfo   &getRegInfo()    const { abort(); }
29f27eeea54fb0176986f76731c499176345047dffChris Lattner  virtual const TargetCacheInfo  &getCacheInfo() const { abort(); }
30b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
31b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  /// addPassesToJITCompile - Add passes to the specified pass manager to
32b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  /// implement a fast dynamic compiler for this target.  Return true if this is
33b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  /// not supported for this target.
34b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner  ///
358844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  virtual bool addPassesToJITCompile(FunctionPassManager &PM);
3640ead9592888c345d6514dff427ae67dfcf23805Chris Lattner
3740ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// addPassesToEmitMachineCode - Add passes to the specified pass manager to
388844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  /// get machine code emitted.  This uses a MachineCodeEmitter object to handle
3940ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// actually outputting the machine code and resolving things like the address
4040ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// of functions.  This method should returns true if machine code emission is
4140ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  /// not supported.
4240ead9592888c345d6514dff427ae67dfcf23805Chris Lattner  ///
438844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM,
4440ead9592888c345d6514dff427ae67dfcf23805Chris Lattner                                          MachineCodeEmitter &MCE);
45de3aa4f77f511ace5b9fc1e3a777b0c3ec5ffa27Brian Gaeke
46de3aa4f77f511ace5b9fc1e3a777b0c3ec5ffa27Brian Gaeke  virtual bool addPassesToEmitAssembly(PassManager &PM, std::ostream &Out);
479a7871bd3dceafd644008c740617d4516a34a601Brian Gaeke
480522b0846c3732c7cdd317431733f2e5b6037d8dBrian Gaeke  virtual void replaceMachineCodeForFunction (void *Old, void *New);
49b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner};
50b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner
51b4f68ed32ede4cf7d31ce9e516e4074dad0a24eeChris Lattner#endif
52