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