PPCTargetMachine.h revision 4246790aa84a530b0378d917023584c2c7adb4a9
1//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file declares the PowerPC specific subclass of TargetMachine. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef PPC_TARGETMACHINE_H 15#define PPC_TARGETMACHINE_H 16 17#include "PPCFrameInfo.h" 18#include "PPCSubtarget.h" 19#include "PPCJITInfo.h" 20#include "PPCInstrInfo.h" 21#include "PPCISelLowering.h" 22#include "PPCMachOWriterInfo.h" 23#include "llvm/Target/TargetMachine.h" 24#include "llvm/Target/TargetData.h" 25 26namespace llvm { 27class PassManager; 28class GlobalValue; 29 30/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. 31/// 32class PPCTargetMachine : public LLVMTargetMachine { 33 PPCSubtarget Subtarget; 34 const TargetData DataLayout; // Calculates type size & alignment 35 PPCInstrInfo InstrInfo; 36 PPCFrameInfo FrameInfo; 37 PPCJITInfo JITInfo; 38 PPCTargetLowering TLInfo; 39 InstrItineraryData InstrItins; 40 PPCMachOWriterInfo MachOWriterInfo; 41 42protected: 43 virtual const TargetAsmInfo *createTargetAsmInfo() const; 44 45 // To avoid having target depend on the asmprinter stuff libraries, asmprinter 46 // set this functions to ctor pointer at startup time if they are linked in. 47 typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, 48 TargetMachine &m, 49 bool verbose); 50 static AsmPrinterCtorFn AsmPrinterCtor; 51 52public: 53 PPCTargetMachine(const Module &M, const std::string &FS, bool is64Bit); 54 55 virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; } 56 virtual const PPCFrameInfo *getFrameInfo() const { return &FrameInfo; } 57 virtual PPCJITInfo *getJITInfo() { return &JITInfo; } 58 virtual PPCTargetLowering *getTargetLowering() const { 59 return const_cast<PPCTargetLowering*>(&TLInfo); 60 } 61 virtual const PPCRegisterInfo *getRegisterInfo() const { 62 return &InstrInfo.getRegisterInfo(); 63 } 64 65 virtual const TargetData *getTargetData() const { return &DataLayout; } 66 virtual const PPCSubtarget *getSubtargetImpl() const { return &Subtarget; } 67 virtual const InstrItineraryData getInstrItineraryData() const { 68 return InstrItins; 69 } 70 virtual const PPCMachOWriterInfo *getMachOWriterInfo() const { 71 return &MachOWriterInfo; 72 } 73 74 static void registerAsmPrinter(AsmPrinterCtorFn F) { 75 AsmPrinterCtor = F; 76 } 77 78 // Pass Pipeline Configuration 79 virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 80 virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 81 virtual bool addAssemblyEmitter(PassManagerBase &PM, 82 CodeGenOpt::Level OptLevel, 83 bool Verbose, formatted_raw_ostream &Out); 84 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 85 bool DumpAsm, MachineCodeEmitter &MCE); 86 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 87 bool DumpAsm, JITCodeEmitter &JCE); 88 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 89 bool DumpAsm, ObjectCodeEmitter &OCE); 90 virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 91 CodeGenOpt::Level OptLevel, 92 bool DumpAsm, MachineCodeEmitter &MCE); 93 virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 94 CodeGenOpt::Level OptLevel, 95 bool DumpAsm, JITCodeEmitter &JCE); 96 virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 97 CodeGenOpt::Level OptLevel, 98 bool DumpAsm, ObjectCodeEmitter &OCE); 99 virtual bool getEnableTailMergeDefault() const; 100}; 101 102/// PPC32TargetMachine - PowerPC 32-bit target machine. 103/// 104class PPC32TargetMachine : public PPCTargetMachine { 105public: 106 PPC32TargetMachine(const Module &M, const std::string &FS); 107 108 static unsigned getJITMatchQuality(); 109 static unsigned getModuleMatchQuality(const Module &M); 110}; 111 112/// PPC64TargetMachine - PowerPC 64-bit target machine. 113/// 114class PPC64TargetMachine : public PPCTargetMachine { 115public: 116 PPC64TargetMachine(const Module &M, const std::string &FS); 117 118 static unsigned getJITMatchQuality(); 119 static unsigned getModuleMatchQuality(const Module &M); 120}; 121 122} // end namespace llvm 123 124#endif 125