PPCTargetMachine.h revision 195340
1108930Speter//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=// 244743Smarkm// 344743Smarkm// The LLVM Compiler Infrastructure 444743Smarkm// 544743Smarkm// This file is distributed under the University of Illinois Open Source 644743Smarkm// License. See LICENSE.TXT for details. 744743Smarkm// 844743Smarkm//===----------------------------------------------------------------------===// 944743Smarkm// 1044743Smarkm// This file declares the PowerPC specific subclass of TargetMachine. 1144743Smarkm// 1244743Smarkm//===----------------------------------------------------------------------===// 1344743Smarkm 1444743Smarkm#ifndef PPC_TARGETMACHINE_H 1544743Smarkm#define PPC_TARGETMACHINE_H 1644743Smarkm 1744743Smarkm#include "PPCFrameInfo.h" 1844743Smarkm#include "PPCSubtarget.h" 1944743Smarkm#include "PPCJITInfo.h" 2044743Smarkm#include "PPCInstrInfo.h" 21108930Speter#include "PPCISelLowering.h" 2244743Smarkm#include "PPCMachOWriterInfo.h" 2344743Smarkm#include "llvm/Target/TargetMachine.h" 2444743Smarkm#include "llvm/Target/TargetData.h" 2544743Smarkm 2644743Smarkmnamespace llvm { 2744743Smarkmclass PassManager; 2844743Smarkmclass GlobalValue; 2944743Smarkm 3044743Smarkm/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. 3144743Smarkm/// 3244743Smarkmclass PPCTargetMachine : public LLVMTargetMachine { 3344743Smarkm PPCSubtarget Subtarget; 3444743Smarkm const TargetData DataLayout; // Calculates type size & alignment 3544743Smarkm PPCInstrInfo InstrInfo; 3644743Smarkm PPCFrameInfo FrameInfo; 3744743Smarkm PPCJITInfo JITInfo; 3844743Smarkm PPCTargetLowering TLInfo; 3944743Smarkm InstrItineraryData InstrItins; 4044743Smarkm PPCMachOWriterInfo MachOWriterInfo; 4144743Smarkm 4244743Smarkmprotected: 4344743Smarkm virtual const TargetAsmInfo *createTargetAsmInfo() const; 4444743Smarkm 4544743Smarkm // To avoid having target depend on the asmprinter stuff libraries, asmprinter 4644743Smarkm // set this functions to ctor pointer at startup time if they are linked in. 4744743Smarkm typedef FunctionPass *(*AsmPrinterCtorFn)(raw_ostream &o, 4844743Smarkm PPCTargetMachine &tm, 4944743Smarkm bool verbose); 5044743Smarkm static AsmPrinterCtorFn AsmPrinterCtor; 5144743Smarkm 5244743Smarkmpublic: 5344743Smarkm PPCTargetMachine(const Module &M, const std::string &FS, bool is64Bit); 5444743Smarkm 5544743Smarkm virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; } 5644743Smarkm virtual const PPCFrameInfo *getFrameInfo() const { return &FrameInfo; } 5744743Smarkm virtual PPCJITInfo *getJITInfo() { return &JITInfo; } 5844743Smarkm virtual PPCTargetLowering *getTargetLowering() const { 5944743Smarkm return const_cast<PPCTargetLowering*>(&TLInfo); 6044743Smarkm } 6144743Smarkm virtual const PPCRegisterInfo *getRegisterInfo() const { 6244743Smarkm return &InstrInfo.getRegisterInfo(); 6344743Smarkm } 6444743Smarkm 6544743Smarkm virtual const TargetData *getTargetData() const { return &DataLayout; } 6644743Smarkm virtual const PPCSubtarget *getSubtargetImpl() const { return &Subtarget; } 6744743Smarkm virtual const InstrItineraryData getInstrItineraryData() const { 6844743Smarkm return InstrItins; 6944743Smarkm } 7044743Smarkm virtual const PPCMachOWriterInfo *getMachOWriterInfo() const { 7144743Smarkm return &MachOWriterInfo; 7244743Smarkm } 7344743Smarkm 7444743Smarkm static void registerAsmPrinter(AsmPrinterCtorFn F) { 7544743Smarkm AsmPrinterCtor = F; 7644743Smarkm } 7744743Smarkm 7844743Smarkm // Pass Pipeline Configuration 7944743Smarkm virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 8044743Smarkm virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 8144743Smarkm virtual bool addAssemblyEmitter(PassManagerBase &PM, 8244743Smarkm CodeGenOpt::Level OptLevel, 8344743Smarkm bool Verbose, raw_ostream &Out); 8444743Smarkm virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 8544743Smarkm bool DumpAsm, MachineCodeEmitter &MCE); 8644743Smarkm virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 8744743Smarkm bool DumpAsm, JITCodeEmitter &JCE); 8844743Smarkm virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 8944743Smarkm CodeGenOpt::Level OptLevel, 9044743Smarkm bool DumpAsm, MachineCodeEmitter &MCE); 9144743Smarkm virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 9244743Smarkm CodeGenOpt::Level OptLevel, 9344743Smarkm bool DumpAsm, JITCodeEmitter &JCE); 9444743Smarkm virtual bool getEnableTailMergeDefault() const; 9544743Smarkm}; 9644743Smarkm 9744743Smarkm/// PPC32TargetMachine - PowerPC 32-bit target machine. 9844743Smarkm/// 9944743Smarkmclass PPC32TargetMachine : public PPCTargetMachine { 10044743Smarkmpublic: 10144743Smarkm PPC32TargetMachine(const Module &M, const std::string &FS); 10244743Smarkm 10344743Smarkm static unsigned getJITMatchQuality(); 10444743Smarkm static unsigned getModuleMatchQuality(const Module &M); 10544743Smarkm}; 10644743Smarkm 10744743Smarkm/// PPC64TargetMachine - PowerPC 64-bit target machine. 10844743Smarkm/// 10944743Smarkmclass PPC64TargetMachine : public PPCTargetMachine { 11044743Smarkmpublic: 11144743Smarkm PPC64TargetMachine(const Module &M, const std::string &FS); 11244743Smarkm 11344743Smarkm static unsigned getJITMatchQuality(); 11444743Smarkm static unsigned getModuleMatchQuality(const Module &M); 11544743Smarkm}; 11644743Smarkm 11744743Smarkm} // end namespace llvm 11844743Smarkm 11944743Smarkm#endif 12044743Smarkm