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