PPCTargetMachine.h revision 198090
1193326Sed//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=// 2193326Sed// 3193326Sed// The LLVM Compiler Infrastructure 4193326Sed// 5193326Sed// This file is distributed under the University of Illinois Open Source 6193326Sed// License. See LICENSE.TXT for details. 7193326Sed// 8193326Sed//===----------------------------------------------------------------------===// 9193326Sed// 10193326Sed// This file declares the PowerPC specific subclass of TargetMachine. 11193326Sed// 12193326Sed//===----------------------------------------------------------------------===// 13193326Sed 14193326Sed#ifndef PPC_TARGETMACHINE_H 15193326Sed#define PPC_TARGETMACHINE_H 16193326Sed 17193326Sed#include "PPCFrameInfo.h" 18193326Sed#include "PPCSubtarget.h" 19193326Sed#include "PPCJITInfo.h" 20193326Sed#include "PPCInstrInfo.h" 21193326Sed#include "PPCISelLowering.h" 22193326Sed#include "PPCMachOWriterInfo.h" 23193326Sed#include "llvm/Target/TargetMachine.h" 24193326Sed#include "llvm/Target/TargetData.h" 25193326Sed 26193326Sednamespace llvm { 27193326Sedclass PassManager; 28193326Sedclass GlobalValue; 29193326Sed 30193326Sed/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. 31193326Sed/// 32193326Sedclass PPCTargetMachine : public LLVMTargetMachine { 33193326Sed PPCSubtarget Subtarget; 34193326Sed const TargetData DataLayout; // Calculates type size & alignment 35193326Sed PPCInstrInfo InstrInfo; 36193326Sed PPCFrameInfo FrameInfo; 37193326Sed PPCJITInfo JITInfo; 38193326Sed PPCTargetLowering TLInfo; 39193326Sed InstrItineraryData InstrItins; 40193326Sed PPCMachOWriterInfo MachOWriterInfo; 41193326Sed 42193326Sedpublic: 43193326Sed PPCTargetMachine(const Target &T, const std::string &TT, 44193326Sed const std::string &FS, bool is64Bit); 45193326Sed 46193326Sed virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; } 47193326Sed virtual const PPCFrameInfo *getFrameInfo() const { return &FrameInfo; } 48193326Sed virtual PPCJITInfo *getJITInfo() { return &JITInfo; } 49193326Sed virtual PPCTargetLowering *getTargetLowering() const { 50193326Sed return const_cast<PPCTargetLowering*>(&TLInfo); 51193326Sed } 52193326Sed virtual const PPCRegisterInfo *getRegisterInfo() const { 53193326Sed return &InstrInfo.getRegisterInfo(); 54193326Sed } 55193326Sed 56193326Sed virtual const TargetData *getTargetData() const { return &DataLayout; } 57193326Sed virtual const PPCSubtarget *getSubtargetImpl() const { return &Subtarget; } 58193326Sed virtual const InstrItineraryData getInstrItineraryData() const { 59193326Sed return InstrItins; 60193326Sed } 61193326Sed virtual const PPCMachOWriterInfo *getMachOWriterInfo() const { 62193326Sed return &MachOWriterInfo; 63193326Sed } 64193326Sed 65193326Sed // Pass Pipeline Configuration 66193326Sed virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 67193326Sed virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 68193326Sed virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 69193326Sed MachineCodeEmitter &MCE); 70193326Sed virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 71193326Sed JITCodeEmitter &JCE); 72193326Sed virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 73193326Sed ObjectCodeEmitter &OCE); 74193326Sed virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 75193326Sed CodeGenOpt::Level OptLevel, 76193326Sed MachineCodeEmitter &MCE); 77193326Sed virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 78193326Sed CodeGenOpt::Level OptLevel, 79193326Sed JITCodeEmitter &JCE); 80193326Sed virtual bool addSimpleCodeEmitter(PassManagerBase &PM, 81193326Sed CodeGenOpt::Level OptLevel, 82193326Sed ObjectCodeEmitter &OCE); 83193326Sed virtual bool getEnableTailMergeDefault() const; 84193326Sed}; 85193326Sed 86193326Sed/// PPC32TargetMachine - PowerPC 32-bit target machine. 87193326Sed/// 88193326Sedclass PPC32TargetMachine : public PPCTargetMachine { 89193326Sedpublic: 90193326Sed PPC32TargetMachine(const Target &T, const std::string &TT, 91193326Sed const std::string &FS); 92193326Sed}; 93193326Sed 94193326Sed/// PPC64TargetMachine - PowerPC 64-bit target machine. 95193326Sed/// 96193326Sedclass PPC64TargetMachine : public PPCTargetMachine { 97193326Sedpublic: 98193326Sed PPC64TargetMachine(const Target &T, const std::string &TT, 99193326Sed const std::string &FS); 100193326Sed}; 101193326Sed 102193326Sed} // end namespace llvm 103193326Sed 104193326Sed#endif 105193326Sed