PPCTargetMachine.h revision 226633
1202375Srdivacky//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=// 2202375Srdivacky// 3202375Srdivacky// The LLVM Compiler Infrastructure 4202375Srdivacky// 5202375Srdivacky// This file is distributed under the University of Illinois Open Source 6202375Srdivacky// License. See LICENSE.TXT for details. 7202375Srdivacky// 8202375Srdivacky//===----------------------------------------------------------------------===// 9202375Srdivacky// 10202375Srdivacky// This file declares the PowerPC specific subclass of TargetMachine. 11202375Srdivacky// 12202375Srdivacky//===----------------------------------------------------------------------===// 13202375Srdivacky 14202375Srdivacky#ifndef PPC_TARGETMACHINE_H 15202375Srdivacky#define PPC_TARGETMACHINE_H 16226633Sdim 17207618Srdivacky#include "PPCFrameLowering.h" 18202375Srdivacky#include "PPCSubtarget.h" 19202375Srdivacky#include "PPCJITInfo.h" 20202375Srdivacky#include "PPCInstrInfo.h" 21202375Srdivacky#include "PPCISelLowering.h" 22202375Srdivacky#include "PPCSelectionDAGInfo.h" 23202375Srdivacky#include "llvm/Target/TargetMachine.h" 24202375Srdivacky#include "llvm/Target/TargetData.h" 25202375Srdivacky 26202375Srdivackynamespace llvm { 27202375Srdivackyclass PassManager; 28218893Sdimclass GlobalValue; 29202375Srdivacky 30202375Srdivacky/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. 31218893Sdim/// 32202375Srdivackyclass PPCTargetMachine : public LLVMTargetMachine { 33202375Srdivacky PPCSubtarget Subtarget; 34218893Sdim const TargetData DataLayout; // Calculates type size & alignment 35218893Sdim PPCInstrInfo InstrInfo; 36202375Srdivacky PPCFrameLowering FrameLowering; 37202375Srdivacky PPCJITInfo JITInfo; 38202375Srdivacky PPCTargetLowering TLInfo; 39202375Srdivacky PPCSelectionDAGInfo TSInfo; 40202375Srdivacky InstrItineraryData InstrItins; 41202375Srdivacky 42202375Srdivackypublic: 43202375Srdivacky PPCTargetMachine(const Target &T, StringRef TT, 44202375Srdivacky StringRef CPU, StringRef FS, 45202375Srdivacky Reloc::Model RM, CodeModel::Model CM, bool is64Bit); 46202375Srdivacky 47202375Srdivacky virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; } 48202375Srdivacky virtual const PPCFrameLowering *getFrameLowering() const { 49202375Srdivacky return &FrameLowering; 50218893Sdim } 51218893Sdim virtual PPCJITInfo *getJITInfo() { return &JITInfo; } 52202375Srdivacky virtual const PPCTargetLowering *getTargetLowering() const { 53202375Srdivacky return &TLInfo; 54202375Srdivacky } 55202375Srdivacky virtual const PPCSelectionDAGInfo* getSelectionDAGInfo() const { 56202375Srdivacky return &TSInfo; 57202375Srdivacky } 58202375Srdivacky virtual const PPCRegisterInfo *getRegisterInfo() const { 59202375Srdivacky return &InstrInfo.getRegisterInfo(); 60202375Srdivacky } 61202375Srdivacky 62202375Srdivacky virtual const TargetData *getTargetData() const { return &DataLayout; } 63202375Srdivacky virtual const PPCSubtarget *getSubtargetImpl() const { return &Subtarget; } 64202375Srdivacky virtual const InstrItineraryData *getInstrItineraryData() const { 65202375Srdivacky return &InstrItins; 66218893Sdim } 67202375Srdivacky 68218893Sdim // Pass Pipeline Configuration 69202375Srdivacky virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 70202375Srdivacky virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 71202375Srdivacky virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 72202375Srdivacky JITCodeEmitter &JCE); 73202375Srdivacky virtual bool getEnableTailMergeDefault() const; 74202375Srdivacky}; 75202375Srdivacky 76202375Srdivacky/// PPC32TargetMachine - PowerPC 32-bit target machine. 77202375Srdivacky/// 78202375Srdivackyclass PPC32TargetMachine : public PPCTargetMachine { 79202375Srdivackypublic: 80202375Srdivacky PPC32TargetMachine(const Target &T, StringRef TT, 81202375Srdivacky StringRef CPU, StringRef FS, 82202375Srdivacky Reloc::Model RM, CodeModel::Model CM); 83202375Srdivacky}; 84202375Srdivacky 85202375Srdivacky/// PPC64TargetMachine - PowerPC 64-bit target machine. 86202375Srdivacky/// 87202375Srdivackyclass PPC64TargetMachine : public PPCTargetMachine { 88202375Srdivackypublic: 89202375Srdivacky PPC64TargetMachine(const Target &T, StringRef TT, 90202375Srdivacky StringRef CPU, StringRef FS, 91202375Srdivacky Reloc::Model RM, CodeModel::Model CM); 92202375Srdivacky}; 93202375Srdivacky 94202375Srdivacky} // end namespace llvm 95202375Srdivacky 96202375Srdivacky#endif 97202375Srdivacky